input target per tipo e nome (selettore)


132

Devo modificare alcuni input della casella di controllo in input nascosti per alcuni ma non tutti gli input in una pagina.

<input type="checkbox" name="ProductCode"value="396P4"> 
<input type="checkbox" name="ProductCode"value="401P4"> 
<input type="checkbox" name="ProductCode"value="F460129">

Il codice jquery qui sotto seleziona solo l'input per tipo che fa sì che tutte le caselle di controllo cambino in input nascosti C'è un modo per verificare sia il tipo di input = "checkbox" che name = "ProductCode" come selettore in modo da poter indirizzare in modo specifico quelli che voglio cambiare?

$("input[type='checkbox']").each(function(){
var name = $(this).attr('name'); // grab name of original
var value = $(this).attr('value'); // grab value of original
var html = '<input type="hidden" name="'+name+'" value="'+value+'" />';
$(this).after(html).remove(); // add new, then remove original input
});

Risposte:


285

Volete un selettore di attributi multipli

$("input[type='checkbox'][name='ProductCode']").each(function(){ ...

o

$("input:checkbox[name='ProductCode']").each(function(){ ...

Sarebbe meglio usare una classe CSS per identificare quelli che si desidera selezionare, tuttavia, poiché molti browser moderni implementano il document.getElementsByClassNamemetodo che verrà utilizzato per selezionare gli elementi ed essere molto più veloce rispetto alla selezione namedell'attributo


Entrambi hanno funzionato per me, ma ho usato il secondo metodo. Grazie, ho un'altra domanda ma farò una nuova domanda.
user357034

22

È possibile combinare i selettori di attributi in questo modo:

$("[attr1=val][attr2=val]")...

in modo che un elemento debba soddisfare entrambe le condizioni. Ovviamente puoi usarlo per più di due. Inoltre, non farlo [type=checkbox]. jQuery ha un selettore per questo, vale a dire :checkboxquindi il risultato finale è:

$("input:checkbox[name=ProductCode]")...

I selettori di attributi sono lenti, tuttavia l'approccio consigliato è di utilizzare selettori di ID e di classe, ove possibile. Puoi modificare il markup in:

<input type="checkbox" class="ProductCode" name="ProductCode"value="396P4"> 
<input type="checkbox" class="ProductCode" name="ProductCode"value="401P4"> 
<input type="checkbox" class="ProductCode" name="ProductCode"value="F460129">

che consente di utilizzare il selettore molto più veloce di:

$("input.ProductCode")...

Ovviamente funziona anche questo, ma posso dare credito a una sola persona per la risposta giusta. :) Una cosa pensata è che non posso scegliere come target per classe perché non ho accesso al markup a meno che non aggiunga una classe e quale punto sarebbe utile. Ma grazie !!!
user357034

6
input[type='checkbox', name='ProductCode']

Questo è il modo CSS e sono quasi sicuro che funzionerà in jQuery.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.