docelowe dane wejściowe według typu i nazwy (selektor)


136

Muszę zmienić niektóre pola wyboru na ukryte dane wejściowe dla niektórych, ale nie wszystkich danych wejściowych na stronie.

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

Poniższy kod jquery wybiera dane wejściowe tylko według typu, co powoduje zmianę wszystkich pól wyboru na ukryte dane wejściowe Czy istnieje sposób na sprawdzenie zarówno typu input = "pole wyboru", jak i name = "ProductCode" jako selektora, abym mógł na nie wskazać że chcę zmienić?

$("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
});

Odpowiedzi:


290

Potrzebujesz selektora wielu atrybutów

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

lub

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

Lepiej byłoby użyć klasy CSS do zidentyfikowania tych, które chcesz wybrać, jednak wiele nowoczesnych przeglądarek implementuje document.getElementsByClassNamemetodę, która będzie używana do wybierania elementów i będzie znacznie szybsza niż wybieranie przez nameatrybut


Oba działały dla mnie, ale użyłem drugiej metody. THX, mam inne pytanie, ale zadam nowe pytanie.
user357034,

22

Możesz łączyć selektory atrybutów w ten sposób:

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

tak, że element musi spełniać oba warunki. Oczywiście możesz używać tego przez więcej niż dwie osoby. Nie rób też tego [type=checkbox]. jQuery ma do tego selektor, :checkboxwięc wynik końcowy to:

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

Selektory atrybutów są jednak powolne, dlatego zalecanym podejściem jest użycie selektorów identyfikatorów i klas tam, gdzie to możliwe. Możesz zmienić swój znacznik na:

<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">

co pozwala na użycie znacznie szybszego selektora:

$("input.ProductCode")...

Oczywiście to również działa, ale tylko jednej osobie mogę przypisać właściwą odpowiedź. :) Jedna rzecz jest taka, że ​​nie mogę kierować na klasę, ponieważ nie mam dostępu do znaczników, chyba że dodam klasę i jaki miałoby to sens. Ale dzięki !!!
user357034,

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

To jest sposób CSS i jestem prawie pewien, że będzie działać w jQuery.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.