2011-07-22 70 views
0

用一個例子更好地解釋(我很新jQuery的,事先說一句抱歉):當屬性包含在屬性列表中時jQuery選擇元素?

// Selector for checkboxes not checked 
var checkboxes = "input:checkbox:not(:checked)"; 

// Selector for labels relative to checkboxes not checked 
var labels = "label[for=" + $(checkboxes).attr("id") + "]"; 

$(checkboxes + ", " + labels]).FadeTo("slow", 0.45); 

這適用於複選框,但也不是爲標籤(奇怪的是,只有一個標籤被選中)。

問題是:我如何選擇「附加」標籤?而且,如果選擇多個元素(返回數組,連續列表或什麼?),.attr("name")實際上是如何工作的。

+0

什麼是您的HTML是什麼樣子? – BoltClock

+0

你基本上可以淡化有複選框和標籤的容器。 – ShankarSangoli

+0

@BoltClock:我使用mvc,因爲我不知道視圖應該如何適應客戶端需求。所以HTML結構很容易改變。 – gremo

回答

0

(奇怪的是,只有一個標籤被選中)

而且,如何.attr("name")當選擇一個以上的元素的實際工作(返回一個數組,級聯列表或.. 。 什麼?)。

在一組元素上調用.attr()只返回第一個元素的屬性值。所以在你的情況下,第一個複選框的標籤被選中。

您可以隨時通過循環動態創建一堆選擇器字符串,但效率不高。如果您的標籤和複選框處於可預測的HTML結構中,則可以使用它來代替您的優勢,並使用jQuery的traversing methods

+0

我不想依賴css選擇器,並且我不知道哪些元素將被放置在三個... – gremo

0
// Selector for checkboxes not checked 
var checkboxes = $('input:checkbox:not(:checked)'), 
    selector = []; 

checkboxes.each(function(){ 
    selector.push('[for="' + $(this).attr('id') + '"]'); 
}); 

// Selector for labels relative to checkboxes not checked 
var labels = $('label:' + selector.join()); 

我想這應該是足夠的。

+0

我不認爲''name〜=「value」]是如何工作的。 – BoltClock

+0

根據文檔,「選擇器將測試字符串與屬性值中的每個單詞相匹配,其中」單詞「被定義爲由空格分隔的字符串。如果測試字符串與任何單詞完全相同,則選擇器匹配。 「 和afaik元素ID不能包含空格:) – usoban

+0

你有它向後。將'[class〜='foo']'想象成'.foo'的等價物,用於選擇'

' - 空白位於HTML屬性中,而不是選擇器中。 – BoltClock

1

試試這個:

$('input:checkbox:not(:checked)').each(function(){ 
    $('label[for=' + $(this).attr('id') + ']').add(this).fadeTo('slow',0.45); 
}); 
+0

嗯,我想這就是它。如果沒有必要鏈接東西,不要鏈接:) – BoltClock