我有一个jQuery选择器,它按标签名称和类查询元素。在我希望返回三个元素的查询中,Safari(适用于Windows的v3.1.1)返回一个额外的元素。
原因似乎是数字ID *。将ID更改为非数字将消除重复元素。奇怪的是,将第一个元素的ID更改为其他数字对最终结果计数具有看似随机的影响。 ID为4会将结果计数增加到五。 0,9和1234都返回四个元素。
<div class="mydiv" id="1"></div>
<div class="mydiv" id="2"></div>
<div class="mydiv" id="3"></div>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.1.min.js"></script>
<script type="text/javascript">
$(function()
{
var div = $('div.mydiv');
alert( div.length ); // Safari 3.1.1 returns 4
alert( $.unique( div ).length ); // Safari 3.1.1 returns 3
} );
</script>
Firefox 3和IE 7在两个警告框中显示3。
*
我知道数字身份证are not valid HTML identifiers。 我正在使用的jqGrid插件默认使用行ID的数字。我会考虑改变这种行为,但与此同时我很好奇为什么这会影响上面的查询。
自从我查看jqGrid的数据检索代码以来已经有一段时间了。事实证明,我可以将行ID设置为服务器上我想要的任何内容。
答案 0 :(得分:6)
简短回答:使用无效HTML时,您将始终遇到不可预测的行为。 (即使您正在做的事情在95%的时间都有效)
问题正如您所述,数字ID无效,因此在进行计数等时,浏览器可以自由地做出这样的假设......如果它们无效且导致错误,那么......这不是他们的错误。