2009-09-04 95 views
1

我有一個事件處理程序,將從相應的複選框列表中刪除一個元素是未選中的。在處理程序的複選框,單擊事件,首先我複製標籤的價值爲複選框:爲什麼IE7認爲這兩個字符串是平等的?

var label = $(this).next().html(); 

然後,我遍歷列表項和每個人的比較那個標籤:

$("#sortable li").each(function() { 
    if ($(this).html() === label) { 
     $(this).remove(); 
    } 
    }); 

在Internet Explorer 8和Firefox中,其工作原理與我的預期完全相同。在Internet Explorer 7中,它沒有。 「if」語句中的條件從來就不是真的。我在這裏錯過了什麼?

根據要求,比較的字符串是「Charge」和「Charge」。

+1

如果使用'=='而不是'===',它會起作用嗎? – Kip

+1

這將有助於瞭解這兩個字符串是什麼。 –

+0

它不適用於==或===。 – Rafe

回答

2

爲什麼你不使用腳本調試器,並確切地看到爲什麼比較是錯誤的?只需在if中設置斷點並觀察變量即可。

IE8的內部腳本調試器會幫助你,只需切換到兼容模式在IE7運行腳本JavaScript運行

+0

在IE7的IE8調試器中運行它揭示了這個問題。出於某種原因,IE在字符串的末尾添加了一個空格,即使它不在HTML源代碼中,Firefox和IE8也不會添加它。 – Rafe

+0

我的意思是IE7瀏覽器模式。 – Rafe

1

你試過調試過嗎?使用alert來查看這兩個值是什麼,檢查該函數是否在IE7中實際調用,並檢查它們是否具有相同的類型。

4
  1. 嘗試alert(label)alert($(this).html())以準確查看比較結果。
  2. 我沒有看到使用嚴格比較的任何理由(===),並且使用普通比較(==)您可以想象受益。
  3. 作爲做你說你想要做的事情的一種方法,這一切似乎都很瘋狂。我總是建議通過一些比它們的HTML內容更爲專用的目的來標識相應的DOM元素,比如ID。
+0

我試過用alert()函數調試當然。字符串是相同的(明顯)。當然,它們都以完全相同的方式獲得(使用jQuery的html()方法)。 – Rafe

+0

就元素而言,使用適當的選擇器和內容不會比在這種情況下使用ID更健壯,並且它使我不必做愚蠢的字符串解析技巧。 – Rafe

0

不回答你的直接問題,但這裏是一個使用jQuery's data method設置和讀取另一種方法標誌直接的元素:

$(this).next().data("toRemove", true); 

//... 

$("#sortable li").each(function() { 
    if ($(this).data("toRemove")) { 
    $(this).remove(); 
    } 
}); 

當然,如果你在任何時候操縱label那麼這將不會是你想要的。我只是提到這一點,因爲.data()是一個非常有用的jQuery功能,我沒有聽說太多。直到一週前我才知道它。

相關問題