IE 中不正确的 jQuery 选择

Posted

技术标签:

【中文标题】IE 中不正确的 jQuery 选择【英文标题】:Incorrect jQuery Selection in IE 【发布时间】:2011-03-07 04:10:11 【问题描述】:

我正在编写一个基本应用程序,其中涉及更改名称引用的 div 中的 html,它在 Chrome、Firefox、Safari 等中运行良好,但在我们心爱的 Internet Explorer 中却不行。我正在动态加载内容,所以我不能给你完整的代码,但这里有一个 HTML 的例子(那里会有很多这样的 div 与升序的数字名称堆叠在一起):

<div id="entry" class="entry" name="15">
    <div id="comment" class="comment" name="15">Click here...</div>
    <div id="rating" class="rating" name="15">24</div>
</div>

和这里是当用户点击“条目”div时触发的jQuery函数:

$.fn.rateup = function() 
    var dname = $(this).attr('name');
    var rating = $("div.rating[name="+dname+"]").html();
    var newrating = parseInt(rating)+1;
    $("div.rating[name="+dname+"]").html(newrating);

现在,我想要发生的是被点击的条目 div 内的评级 div 中的 HTML 增加一,但在 IE 中,条目 div below 的评级增加了点击.我不知道它怎么可能在这里选择了错误的 div,因为它有一个非常具体的名称,在我的代码中非常清楚地引用了它。我尝试在单击的条目 div 中使用 jQuery 的 .find() 方法做同样的事情,并得到相同的结果。我被难住了。

点击here 看看我在说什么。它可能是其他方式的错误,但这是我目前唯一关心的东西。如果最坏的情况变得最糟,当且仅当在 IE 中呈现时,我可以让它使用 [name=parseInt(dname)-1] 选择元素,但我想找到一个不那么 hackey 的解决方案。

感谢您的意见。

编辑(6/24 晚上 11:30)

结合下面的答案和我新发现的知识,即一些古怪的 CSS 将事物定位在令人困惑的地方(除非处理正确,否则内联浮动右侧会将事物弹出到下一行),我已经解决了这个问题。感谢大家帮助我成为更好的编码员。我将开始更正确地使用属性!

【问题讨论】:

【参考方案1】:

好吧,我认为你混淆了选择器。

<div id="e15" class="entry">
    <div class="comment">Click here...</div>
    <div class="rating">24</div>
</div>

如果您现在尝试选择评级 div,“this.rating”应该会选择正确的。


PS 您的姓名字段不是必需的,在 xhtml 中无效。 (因为它只能是表单域的成员)

【讨论】:

你的答案是 2 中更正确的,尤其是使用上下文。 +1 这确实产生了正确的选择,并调整了我的 CSS 我现在将评论定位在正确的位置。感谢大家的帮助。【参考方案2】:

我不认为 DIV 元素可以具有 name 属性,但这无关紧要,因为如果您针对单击的 DIV 进行所有计算,则不需要它...

<div id="entry" class="entry">  
    <div class="comment">Click here...</div>  
    <div class="rating">24</div>  
</div>

<div id="anotherEntry" class="entry">  
    <div class="comment">Click here...</div>  
    <div class="rating">17</div>  
</div>


$.fn.rateup = function()  
    var ratingElement = $(this).find("div.rating"); 
    var rating = ratingElement.html(); 
    var newrating = parseInt(rating)+1; 
    ratingElement.html(newrating); 
 

这假定每个评级 DIV 都包含在其自己的条目 DIV 中,并且每个都附加了 $.fn.rateup 事件处理程序。

至于选择错误评级的原因,这将取决于附加了事件处理程序的元素 - 我们可以看到执行此操作的代码吗?

【讨论】:

【参考方案3】:

如果您正确使用 id,您似乎可以简化一切。 ;)

id 在整个页面上应该是唯一的,并且看起来您使用它们更像是类。也许使用像“1”这样的id作为条目,使用“c1”和“r1”作为评论和评级将允许更清晰的选择器,从而完全解决问题。然后你可以做类似的事情

$('#r'+$(this).id).html(newrating)

并没有真正解决您所看到的问题,而是使 html 和 javascript 更清洁恕我直言。

【讨论】:

id 在技术上不能以数字开头 @kasumi,确实如此。写这篇回复的时候,我的思绪几乎都没有了,所以我会放松一下。

以上是关于IE 中不正确的 jQuery 选择的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Toggle 在 IE8 中不起作用

jQuery 的选择器在 iframe 中不起作用

属性!='value' jquery 选择在 IE 中不起作用

jQuery *= 选择器在 IE8 中不起作用

jquery图像选择器在IE7中不起作用

jQuery .hover 在 Safari 或 Chrome 中不起作用