2010-06-23 58 views
1

我正在编写一个基本的应用程序,它涉及到更改名称引用的div中的html,并且它在Chrome,Firefox,Safari等中运行良好,但不在我们心爱的Internet Explorer中运行。我加载的内容动态,所以我不能给你完整的代码,但这里的HTML(其中会有堆放着上升的数值名称很多这样的div)的一个例子:在IE中错误的jQuery选择

<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> 

而这里的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的HTML由一个增加,但在IE评级:当用户点击“进入”格触发入口格低于单击增加。我不知道它在这里可能会选择错误的div,因为它有一个非常明确的名称,在我的代码中非常清楚地引用了它。我试过在单击的条目div中用jQuery的.find()方法做同样的事情,并得到相同的结果。我很难过。

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

感谢您的想法。

EDIT(6/24 11:30)

结合下面的答案和我的新知识,一些古怪的CSS被定位在混乱的地方东西(内嵌浮动权弹出下来到下一行,除非正确处理) ,我已经解决了这个问题。感谢大家帮助我成为更好的编码器。我将开始更加正确地使用属性!

回答

2

嗯,我认为你是混淆选择器。

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

如果您现在尝试选择评分div,则应使用“this.rating”选择正确的评分div。


PS您的姓名字段并非真的必要,并且在xhtml中无效。 (因为它只能是一个表单字段的成员)

+0

你的答案是更正确的2,特别是使用上下文。 +1 – 2010-06-23 15:39:45

+0

这确实产生了正确的选择,并调整我的CSS我现在将评论放置在正确的位置。感谢大家在这里寻求帮助。 – man1 2010-06-25 06:44:21

0

好像你可以简化一切,如果你正确使用了ID。 ;)

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

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

并不真正解决问题,即你看到的,但使html和JavaScript更清洁imho。

+1

id不能以数字开头技术 – Kasumi 2010-06-23 07:51:09

+0

@ kasumi,够了。在写这个回复时,我的想法大多消失了,所以我会削减一些松懈。 – 2010-06-23 15:39:05

2

我不认为DIV元素可以有一个名称属性,但这是无关的,因为它是不需要的,如果你做所有的计算相对到被点击的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事件处理程序。

至于选错级别的原因,这取决于哪些元素具有附加的事件处理程序 - 我们可以看到执行此操作的代码吗?