2010-06-23 60 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事件處理程序。

至於選錯級別的原因,這取決於哪些元素具有附加的事件處理程序 - 我們可以看到執行此操作的代碼嗎?