2009-07-02 51 views
45

我知道如何獲得元素具有特定屬性:我怎樣才能不特定屬性的元素的jQuery

$("#para [attr_all]") 

但我怎麼能獲得一個不帶特定屬性的元素? 我試試

$("#para :not([attr_all])") 

但它不起作用。 這是做什麼的正確方法?

讓我舉一個例子:

<div id="para"> 
    <input name="fname" optional="1"> 
    <input name="lname"> 
    <input name="email"> 
</div> 

的jQuery:

$("#para [optional]") // give me the fname element 
$("#para :not([optional])") //give me the fname, lname, email (fname should not appear here) 

回答

18

第一件事:

$('p').filter(function(){ 
    return !$(this).attr('attr_all'); 
}); 

然而p:not([attr_all])應該工作,所以我想別的東西在你的代碼是怎麼回事。

+1

我終於解決了這個問題和它是由另一部分代碼引起的,所以我會將其標記爲答案。 – Billy 2010-01-08 16:48:52

5

嘗試$("#para [attr!=val]")

你的:not真的應該工作,但這使我懷疑還有其他事情正在發生。

有關屬性選擇器的完整列表,請參閱jQuery Selectors docs

是在我腦海中(也許次優)
+0

它不起作用。 – Billy 2009-07-02 11:18:44

+0

是的,我認爲你的問題是在上下文中,而不是這個選擇器。 – chaos 2009-07-02 11:19:55

+0

+1。請注意,這個選擇器是特定於JQuery的。它沒有被定義爲一個CSS屬性選擇器,所以它不能用於定位樣式元素(通過CSS):http://www.w3.org/TR/CSS2/selector.html#attribute-selectors – PatrikAkerstrand 2009-07-02 11:20:50

102

如果你的代碼示例是你正在使用的確切代碼,我認爲這個問題是一個錯誤的空間。

$("#para :not([attr_all])") 

應該

$("#para:not([attr_all])") 

如果在留出空間存在,它選擇後裔#para

7

更快的方法是首先獲取所有帶有ID para的元素(如果存在多個元素,則爲無效的HTML,請考慮使用類來代替)並使用過濾器(或者根據HTML構造)方法只能獲得無屬性的元素,像這樣:

$('#para').filter(':not([attr_all])'); 

這樣做你有jQuery的做少得多的工作,因爲你只能通過元素的一個較小的子循環,從而讓那些沒有屬性。使用單個選擇器語句(例如$("#para :not([attr_all])"))執行此操作將導致jQuery獲取所有沒有該屬性的元素,然後過濾它們以獲得para的ID。

1

弗蘭克德羅莎的答案是關於正確的,但由於OP確實想找到後代,所以有點關閉。自己嘗試一下,似乎應該按照它的方式工作,但可能無論你運行什麼都不喜歡':'運算符被直接用作後代。嘗試使用

$("#para input:not([optional])") 

會留下評論,但還不能。

相關問題