![](/img/trans.png)
[英]Replace all html attribute definitions that use single quotes with double quotes
[英]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>
你可以这样做:
<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.