【发布时间】:2014-05-20 15:03:33
【问题描述】:
使用 jQuery 的“is”函数运行以下比较将返回 false,因为 DOM 元素并不完全相同,尽管它们在视觉和功能上是相同的:
var $a = $('<div id="test" href="http://www.google.com"></div>');
var $b = $('<div href="http://www.google.com" id="test"></div>');
$a.is($b);//FALSE
使用 DOM 对象的直接比较也会返回 false。
查看运行示例:http://jsfiddle.net/6zqwn/5/
那么,有没有办法避免在比较时考虑属性的顺序?
(我为什么要问这个问题: 我在跨浏览器单元测试中使用这些比较,其中不同的浏览器会更改属性的顺序,同时仍然在功能上创建相同的 DOM 元素。)
【问题讨论】:
-
我环顾四周,这似乎是一个更简单的解决方案:stackoverflow.com/a/19342581/2287470 - 例如
$a.get(0).isEqualNode($b.get(0))或$a[0].isEqualNode($b[0])。小提琴:jsfiddle.net/6zqwn/7 - 你可能遇到的唯一问题是它支持的唯一 IE 版本是 9+ (quirksmode.org/dom/core/mobile.html#t135 & quirksmode.org/dom/core/#t135) -
我们使用 div 是因为一个特定的边缘情况,客户端使用不正确支持锚标记的“混合”移动应用(包装 web 视图的本机代码)。
-
@Joe 你可以找到一些 shims 来处理 IE8,例如:code.ohloh.net/… 也就是说,你的评论应该是一个答案;)
-
@A.Wolff - 谢谢,但这是我链接到的答案中 Keen 的全部工作,我正好适合这个问题 :) 很高兴还有一个垫片!
标签: javascript jquery html unit-testing