2012-01-19 14 views
22

Widziałem to jQuery równoważne:Jak wybrać element wejściowy według wartości za pomocą javascript?

$('input[value="something"]'); 

Ale jak można go wybrać przy użyciu czystego javascript (jQuery) nie.

Dzięki za wszystkie dotychczasowe odpowiedzi, ale jestem pewien, że jeśli działa poprawnie, muszę zmienić wartość danych wejściowych na coś innego. Mogę to zrobić przez:

<enter snippet to select element here>.value = "someOtherValue"; 

Ale wydaje się to nie takie proste. Jakieś pomysły.

+4

Zastosowanie getElementsByTagName (zdefiniowane w DOM), aby uzyskać listę wszystkich tagów wejściowych, a następnie filtrować je w kodzie JavaScript (patrząc na ich atrybutu value). Po wykonaniu tego kilka razy, należy ponownie przemyśleć, dlaczego chcesz uniknąć jQuery. – Thilo

Odpowiedz

31

z IE6, IE7, IE8

function getInputsByValue(value) 
{ 
    var allInputs = document.getElementsByTagName("input"); 
    var results = []; 
    for(var x=0;x<allInputs.length;x++) 
     if(allInputs[x].value == value) 
      results.push(allInputs[x]); 
    return results; 
} 

z nowoczesne przeglądarki ie9 + (? nie wiem na przykład w ie9):

document.querySelectorAll("input[value=something]"); 
+0

Nie jestem pewien, czy to działa, muszę zmienić wartość wszystkich wejść o pewnej wartości, powiedzmy, że muszę zmienić wartość z "someValue" "to" SomeOtherValue ". Nie pozwala mi tego zrobić przy użyciu metody getInputsByValue ("someValue"). Value = "SomeOtherValue"; – Pieter888

+0

@ Pieter888 "Nie działa", ponieważ odpowiedź została zapisana w oryginalnym pytaniu, a nie w nowej. Po prostu przechodzisz przez wynikową tablicę i ustawiasz każdą wartość elementu na coś. Wiesz, jak przechodzić przez tablicę, prawda? – Esailija

+0

Mam to, dziękuję za szybką reakcję! – Pieter888

1

Coś jak to działa:

function getCheckboxByValue(v) { 
     var inputs = document.getElementsByTagName('input'); 
     for (var i = 0; i < inputs.length; i++) { 
       if(inputs[i].type == "checkbox" && inputs[i].value == v) { 
         return inputs[i]; 
       } 
     } 
     return false; 
} 
(function testCheckbox() { 
     getCheckboxByValue("1").checked = true; 
})(); 

Korzystanie jQuery byłoby znacznie lepiej, choć.

+0

tylko zwraca pierwszą. – Thilo

0

Coś jak to powinno działać ...

for(i in document.getElementsByTagName('input')) { 
    if(i.value == 'desiredValue') { 
     return i; 
    } 
} 

Edit: To zwróci tablicę wszystkie mecze

var matches = []; 
for(i in document.getElementsByTagName('input')) { 
    if(i.value == 'desiredValue') { 
     matches.push(i); 
    } 
} 
+0

tylko zwraca pierwszy mecz – Thilo

+0

prawda, szybka poprawka naprawi to – JamesHalsall

8

Możesz użyć document.querySelectorAll() w nowoczesnych przeglądarkach (https://developer.mozilla.org/En/DOM/Document.querySelectorAll), np.

var byValue = document.querySelectorAll('input[value="something"]'); 

dla starszych przeglądarek musisz iteracyjne nad input s i sprawdzić wartość, na przykład

var inputs = document.getElementsByTagName("input"), 
    i, 
    len, 
    byVal = [], 
    value = "something"; 

for (i = 0, len = inputs.length; i < len; i++) { 
    if (inputs[i].value === value) { 
     byVal.push(inputs[i]); 
    } 
} 
+1

+1 za używanie nowoczesnego podejścia – JamesHalsall

+0

=== jest prawdopodobnie błędne, ponieważ .value jest zawsze ciągiem –

Powiązane problemy