2011-04-27 40 views
17

我想降價關閉在所有div的所有輸入值,但只有一個div sale_wrap。我如何使用jquery進行異常?jQuery的,如果不是格設置ID

<div id="one_wrap"> 
    <input type="checkbox" name="1" value=""> 
    <input type="checkbox" name="1" value=""> 
</div> 
<div id="two_wrap"> 
    <input type="checkbox" name="2" value=""> 
    <input type="checkbox" name="2" value=""> 
</div> 
<div id="sale_wrap"> 
    <input type="checkbox" name="3" value=""> 
</div> 

的jQuery:

if($("div").attr("id") != "sale_wrap") { 
    t_balance; 
} else { 
    var sale = t_balance*((100-window.discount_p)/100); 
    t_balance = sale; 
} 
+0

一些事情錯在這裏。 '$(「div」)。attr(「id」)'總是返回選中的第一個div的id。我希望,這種狀況永遠是真的。你能告訴我們在哪個函數/事件中,你試着使用這個代碼。? – Bharath 2011-04-27 12:51:34

+1

這是不是很清楚你在這裏試圖做什麼。 HTML標記是所有複選框,和你的榜樣JS(僞代碼?)是設置基於其他一些全球「discount_p」一些全球「t_balance」 ......看來,如果您的JS代碼可能有些功能是一部分已經循環通過div,並返回't_balance'? – 2011-04-27 12:57:18

回答

52

使用not selector

$("div:not(#sale_wrap)") 
+1

的 '.ATT( 「ID」)!= 「sale_wrap」',而整個 'if' 語句,是多餘的。非選擇器已經從結果集中刪除了'sale_wrap'id,因此不需要再次檢查它。 – 2011-04-27 12:33:25

+0

@ z33mm:它不工作:) – tonoslfx 2011-04-27 12:35:04

+0

哦感謝名單。沒有完全讀取代碼。修改答案。這個問題中的例子看起來很奇怪,attr('id')中的if只會返回第一個元素的id。 – z33m 2011-04-27 12:38:29

8

jQuery的not()功能可以做到這一點。

要選擇所有的div除非idsale_wrap的DIV:

$('div').not('#sale_wrap') 

然後,您可以遍歷與each()的div。

舉個例子:

#HTML 
<p id="1">Some text in paragraph 1</p> 
<p id="2">Some text in paragraph 2</p> 
<p id="3">Some text in paragraph 3</p> 

#JS 
# turn background to blue for all 'p' except p with id=2 
$('p').not('#2').each(function() { 
    $(this).css('background-color', 'blue'); 
}); 

退房this example on JsFiddle

1

嘗試使用

if($('div').not('#sale_wrap')) 
{ 
    t_balance; 
} 
else 
{ 
    var sale = t_balance*((100-window.discount_p)/100); 
    t_balance = sale; 
} 
+0

'$('div')。not('#sale_wrap')'將返回一個jQuery元素,其中包含所有'div'元素,其中沒有'sale_wrap'的id。這不是對特定div的條件檢查,因此不需要「if」語句。如果在標記中有任何一個ID不是'sale_wrap'的標識中的這個'if'語句將總是被評估爲'真' – 2011-04-27 12:51:35

0

或者:

$('div[id != "sale_wrap"]') 
1

我想補充一點的更多信息。 則可以使用多個not selector這樣的:

$("div:not(#sale_wrap):not(.sale_class)"); 

$("div:not(#sale_wrap, .sale_class)"); 

$("div").not('#sale_wrap, .sale_class');