2011-04-27 14 views
17

Quiero reducir el precio a todos los valores de entrada en todos los divs, excepto uno solo div sale_wrap. ¿cómo hago una excepción con jquery?jquery if div no 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

Algo va mal aquí. '$ (" div "). attr (" id ")' siempre devuelve el id del primer div del seleccionado. Espero, esa condición siempre será cierta. ¿Podría decirnos en qué función/evento está intentando este código? – Bharath

+1

No está muy claro lo que estás tratando de hacer aquí. El marcado HTML es todas las casillas de verificación, y su ejemplo JS (pseudo-código?) Es establecer algunos 't_balance' global basado en alguna otra 'discount_p' global ... parece como si su código JS puede ser parte de alguna función que es Ya está pasando por los divs, y devolviendo 't_balance'? –

Respuesta

52

Uso not selector

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

El '.att ("id")! = "Sale_wrap"', y toda la instrucción 'if', es redundante. El selector de no ya ha eliminado la identificación 'sale_wrap' del conjunto de resultados, por lo que no es necesario verificarla nuevamente. –

+0

@ z33mm: no funciona :) – tonoslfx

+0

oh gracias. didnt leer el código por completo. respuesta modificada El ejemplo en la pregunta se ve extraño attr ('id') en el if devolverá la identificación del primer elemento solamente. – z33m

8

La función jQuery not() puede hacer esto.

Para seleccionar todos los divs, excepto el div con id de sale_wrap:

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

A continuación, puede bucle sobre los divs con each().

A modo de ejemplo:

#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'); 
}); 

Salida this example on JsFiddle.

1

Intente utilizar

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

'$ (' div '). No (' # sale_wrap ')' devolverá un elemento de jQuery que contiene todos los elementos 'div' que no tienen un id de 'sale_wrap'. No es una verificación condicional para un div específico, por lo que no es necesario un enunciado 'if'. Esta declaración 'if' siempre evaluará 'verdadero' si hay algún div en el marcado con un id distinto de 'sale_wrap' –

0

alternativa:

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

sólo para añadir algo más de información. se pueden usar múltiples not selector así:

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

o

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

o

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