2012-01-19 11 views
22

lo he visto de jQuery equivalente:¿Cómo seleccionar un elemento de entrada por valor usando javascript?

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

Pero, ¿cómo seleccionar usando javascript puro (sin jQuery).

Gracias por todas las respuestas hasta el momento, pero estoy seguro de que si está funcionando correctamente, tengo que cambiar el valor de la entrada en otra cosa. Pensé que podría hacerlo por

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

Pero parece que no es tan fácil. Algunas ideas.

+4

Uso getElementsByTagName (definido en DOM) para obtener una lista de todas las etiquetas de entrada y, a continuación, filtrarlos en código Javascript (mirando a su atributo de valor). Después de haber hecho esto varias veces, vuelva a pensar por qué quiere evitar jQuery. – Thilo

Respuesta

31

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

con navegadores modernos ie9 + (? no estoy seguro de ie9 en realidad):

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

No estoy seguro de si esto está funcionando, necesito cambiar el valor de todas las entradas con cierto valor, digamos que necesito cambiar el valor de "someValue "a" SomeOtherValue ". No me permite hacerlo usando getInputsByValue ("someValue"). Value = "SomeOtherValue"; – Pieter888

+0

@ Pieter888 "No funciona" porque la respuesta se escribió en su pregunta original y no en la nueva. Simplemente recorre el conjunto resultante y establece el valor de cada elemento en algo. Sabes cómo recorrer una matriz, ¿verdad? – Esailija

+0

¡Lo tengo, gracias por la respuesta rápida! – Pieter888

1

Algo como esto funciona:

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

usando jQuery sería mucho mejor, sin embargo.

+0

solo devuelve el primero, sin embargo. – Thilo

0

Algo como esto debería funcionar ...

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

Editar: Esto devolverá una matriz de todos los partidos

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

solo devuelve la primera coincidencia – Thilo

+0

cierto, una enmienda rápida arreglará que – JamesHalsall

8

Puede usar document.querySelectorAll() en los navegadores modernos (https://developer.mozilla.org/En/DOM/Document.querySelectorAll), p.

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

Para los navegadores antiguos que tendrá que iterar sobre los input s y comprobar el valor, por ejemplo,

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 para usar un enfoque moderno – JamesHalsall

+0

=== es probablemente incorrecto, porque .value siempre es una cadena –

Cuestiones relacionadas