有没有办法比较jQuery对象,而忽略HTML属性'订购?

时间:2014-05-20 15:03:34

标签: javascript jquery html unit-testing

使用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元素。)

1 个答案:

答案 0 :(得分:5)

如果我们需要忽略属性' order ,我们可以使用jQuery选择器作为“is”函数的参数,然后分别比较元素的内部HTML。

使用问题中的相同示例:

var $a = $('<div id="test" href="http://www.google.com"></div>');
var $b = $('<div href="http://www.google.com" id="test"></div>');
var selector = 'div#test[href="http://www.google.com"]';
($a.is(selector) == $b.is(selector)) && ($a.html() == $b.html());//TRUE

请参阅运行示例:http://jsfiddle.net/GuQ53/4/


<强>更新

在注释中Joe链接的更简单的解决方案,它应该在IE9 +中工作并处理子元素,它使用原生的“isEqualNode”函数。请在此处查看解决方案:https://stackoverflow.com/a/19342581/1785003