我之前已经回答过这个问题 https://stackoverflow.com/a/19101905/1253312,但我并不完全理解why答案是正确的。答案的要点:
<p id="jqrender"></p>
$(function() {
$('#jqrender').html("<a href=http://www.website.com/>foo bar</a>");
});
在 OSX 上最新的 Chrome 上,jQuery 将其解释为<a href="website.com"></a>foo bar
。我想这是有道理的,因为它认为最接近的标记更正是<a href="website" />
。但本质上,Chrome 本身会将标记解释为<a href="website.com/">foo bar</a>
.
为什么是这样?我想要一个技术答案,jQuery 的哪一部分正在执行此标记修复,它遵循哪些一般规则,以及我如何猜测 jQuery 将如何对其他损坏的标记做出反应?
jQuery 源代码中有问题的行在这里:https://github.com/jquery/jquery/blob/master/src/manipulation.js#L222 https://github.com/jquery/jquery/blob/master/src/manipulation.js#L222
tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
Where rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi
and elem
是可能损坏的标记的片段。
这样做的结果replace
对于该输入,调用是<a href=http://www.website.com></a>foo bar</a>
.
然后浏览器会进行修复工作that标记,通过删除终极</a>
.
所以问题中的另一点可以回答:这种特殊情况也会影响除area、br、col、embed、hr、img、input、link、meta和param之外的所有标签。
tl;dr: https://stackoverflow.com/a/1732454/1253312 https://stackoverflow.com/a/1732454/1253312
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)