2012-01-19 2 views
22

Я видел это JQuery эквивалент:Как выбрать элемент ввода по значению с помощью javascript?

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

Но как выбрать его с помощью чистого JavaScript (не JQuery).

Спасибо за все ответы до сих пор, но я уверен, что если он работает правильно, мне нужно изменить значение ввода во что-то другое. Хотя я мог это сделать

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

Но, похоже, это не так просто. Есть идеи.

+4

Использование getElementsByTagName (определено в DOM), чтобы получить список всех тегов ввода, а затем фильтровать их в Javascript коде (если смотреть на их значение атрибута). После того, как вы это сделали несколько раз, переосмыслите, почему вы хотите избежать jQuery. – Thilo

ответ

31

с 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; 
} 

с современные браузеры ie9 + (? не уверены в том, что на самом деле 9):

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

Я не уверен, что это работает, мне нужно изменить значение всех входов с определенным значением, скажем, мне нужно изменить значение из «someValue "на" SomeOtherValue ". Это не позволяет мне сделать это, используя getInputsByValue («someValue»). Value = «SomeOtherValue»; – Pieter888

+0

@ Pieter888 Это «не работает», потому что ответ был написан на ваш оригинальный вопрос, а не на ваш новый. Вы просто перебираете результирующий массив и задаете значение каждого элемента. Вы знаете, как пройти через массив, не так ли? – Esailija

+0

Я получил его, спасибо за быстрый ответ! – Pieter888

1

Что-то вроде это работает:

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

Использование JQuery было бы гораздо лучше, хотя.

+0

возвращает только первый. – Thilo

0

Что-то, как это должно работать ...

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

Edit: Это будет возвращать массив всех матчей

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

возвращает только первое совпадение – Thilo

+0

true, быстрая поправка исправит это – JamesHalsall

8

Вы можете использовать document.querySelectorAll() в современных браузерах (https://developer.mozilla.org/En/DOM/Document.querySelectorAll), например.

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

Для более старых браузеров, вам придется перебрать input с и проверить значение, например,

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 для использования современного подхода – JamesHalsall

+0

===, вероятно, неправильно, потому что .value всегда является строкой –

Смежные вопросы