繁体   English   中英

如何将JavaScript附加到页面,html包含用单引号括起来的属性定义?

[英]How can I append with JavaScript to a page, html that contains attribute definitions enclosed in single quotes?

我有一些JS代码可以动态创建一些HTML元素。 我们这样说:

var html = '<a href="#" class="example">Some content</a>';
$(whateverselector).append(html);

如您所见,使用了jQuery。 我正在尝试执行以下操作:我正在生成一些html元素,我希望在这个特定元素上添加用单引号括起来的属性。

var someOption = '<a href="#" data-options=\'{"maxWidth": 100, "maxHeight": 100}\'></a>';
$(whateverselector).append(someOption);

在jQuery将元素添加到页面之后,单引号被最终DOM中的双引号替换。 所以它看起来像这样:

<a href="#" data-options="{"maxWidth": 100, "maxHeight": 100}"></a>

问题是另一个(独立的)库正在读取此值,并且它没有使用双引号正确解析它们(作为对象)。

如何在DOM中使用单引号显示此属性? 可能这是jQuery中append方法的一个问题。 Vanilla JS解决方案也受到欢迎。

在jQuery将元素添加到页面之后,单引号被最终DOM中的双引号替换。

你错过了标记和DOM的实时结构之间的区别。

标记(在本例中为HTML)是元素的文本表示 一旦解析并创建了元素,它们就是树中的对象(文档)。 属性值的引号是标记的东西; 解析标记后它们不存在。

例如,这些结果相同

$("whatever").append("<a href='#'>...</a>");
$("whatever").append('<a href="#">...</a>');

在DOM中生成a元素中没有任何区别。

向您显示DOM的浏览器(例如,开发工具中的Inspect Element)向您显示DOM的表示。 他们可以显示他们选择的属性值; 根据我的经验,大部分用双引号显示它们,但如果他们喜欢,他们可以使用单引号。 它与解析用于创建这些元素的标记(如果有)无关。

问题是另一个(独立的)库正在读取此值,并且它没有使用双引号正确解析它们(作为对象)。

我怀疑你错误地解释了什么是错的。 但如果你不是,那么有问题的图书馆就会被打破。 证明:

 var someOption = '<a href="#" data-options=\\'{"maxWidth": 100, "maxHeight": 100}\\'></a>'; $(document.body).append(someOption); var options = JSON.parse($("a").attr("data-options")); console.log(options.maxWidth, options.maxHeight); // 100, 100 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

为什么不使用jQuery的.data()甚至.attr()函数:

var someOption = $('<a href="#" data-options=""></a>');
someOption.data('options' , '{"maxWidth": 100, "maxHeight": 100}');
// OR: someOption.attr('data-options' , '{"maxWidth": 100, "maxHeight": 100}');
$(whateverselector).append(someOption);

你可以这样做:

<body>

    <h1>Title</h1>

    <p class="text"></p>

    <script type="text/javascript">
        $(document).ready(function(){
            var someOption = "<a href=\"#\" data-options=\"{'maxWidth': 100, 'maxHeight': 100}\">Some text</a>";
            $(".text").append(someOption);
        });
    </script>
</body>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM