JQuery 将属性值括在双引号中,即使原始 html 字符串具有单引号,它也会被覆盖,如以下示例所示:
$("<div><span class= 'foo' id='foo2' >abc</span></div>").html();
输出:
<span class="foo" id="foo2">abc</span>
我在 JQuery 文档中查找了一下,也搜索了但找不到与此相关的任何内容,虽然我可以编写这样的正则表达式替换,但我不想用正则表达式操作 HTML,原因很明显,我想知道是否有一种深刻的方法来实现这一点。
编辑:
它困扰我的原因是在应用程序的某些地方存在像htmlstring.indexOf("attr='value'")
这样的代码,当我通过将其转换为 JQuery 对象并返回字符串在htmlstring
中进行一些操作时,这些代码最终会中断。
编辑 2:
对于我在上层编辑中提到的特定问题,我不需要解决方案,我已经处理过了,让我问这个问题的是,是否有可能或更改 HTML 中的引号包装属性的更好方法是什么。
我们可以选择对 HTML 中的属性使用单引号或双引号,但是...
。呈现页面时,它们都变成双引号。
我建议您使用.attr()
方法而不是使用.indexOf()
.
请参阅下面的代码片段:
var htmlstring1 = document.getElementById('myDiv1').outerHTML;
var htmlstring2 = document.getElementById('myDiv2').outerHTML;
console.log("string:", htmlstring1);
console.log("string:", htmlstring2, 'nn');
// Note that attr='value' of myDiv2 becomes attr="value" in console
console.log(`Using .indexOf('attr="value"'): (will always work)`)
if (htmlstring1.indexOf('attr="value"') > -1)
console.log('Found.');
else console.log('Not found.');
console.log(`Using .indexOf("attr='value'"): (will never work)`)
if (htmlstring1.indexOf("attr='value'") > -1)
console.log('Found.');
else console.log('Not found.');
console.log(`Using .attr('attr') == 'value'): (a suggestion)`)
if ($('#myDiv1').attr('attr') == 'value')
console.log('Found.');
else console.log('Not found.');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myDiv1" attr="value"></div>
<div id="myDiv2" attr='value'></div>
⋅ ⋅ ⋅
在您发表评论后,我尝试了一些事情...
正如您在问题中谈到的,这里有一个技巧:
当 jQuery 使用元素字符串时,它会用双引号规范化:
var htmlstring = "<span class='foo' id='foo2'>abc</span>";
console.log(htmlstring);
var htmlparsed = $(htmlstring)[0];
console.log(htmlparsed);
// You could even create a function to handle the normalization of quotes
function norm_quotes(str){
return $(str)[0];
}
console.log(norm_quotes(htmlstring));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
我建议你只在 jQuery 解析字符串后才对字符串使用你的.indexOf("attr='value'")
。
希望对您有所帮助。