Cum se selectează un element de intrare prin valoare folosind javascript? (Programare, Javascript, Html)

Pieter888 a intrebat.
a intrebat.

Am văzut că este echivalentul lui jquery:

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

Dar cum se selectează folosind javascript pur (fără jQuery).

Mulțumesc pentru toate răspunsurile de până acum, dar sunt sigur că, dacă funcționează corect, trebuie să schimb valoarea inputului în altceva. M-am gândit că aș putea face acest lucru prin

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

Dar se pare că nu este atât de ușor. Orice idei.

Comentarii

  • Folosiți getElementsByTagName (definit în DOM) pentru a obține o listă cu toate tag-urile de intrare și apoi filtrați-le în codul Javascript (uitându-vă la atributul lor de valoare). După ce ați făcut acest lucru de câteva ori, regândiți-vă de ce doriți să evitați jQuery. –  > Por Thilo.
  • Puteți încerca acest stackoverflow.com/questions/34001917/… O altă modalitate de a rezolva acest caz. –  > Por Alejandro D.V..
7 răspunsuri
user652649

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

cu browsere moderne ie9+ (? nu sunt sigur pentru ie9 de fapt) :

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

Comentarii

  • Nu sunt sigur dacă acest lucru funcționează, am nevoie să schimb valoarea tuturor intrărilor cu o anumită valoare, să spunem că trebuie să schimb valoarea de la „someValue” la „SomeOtherValue”. Nu mă lasă să o fac folosind getInputsByValue(„someValue”).value = „SomeOtherValue”; –  > Por Pieter888.
  • @Pieter888 Nu „funcționează” pentru că răspunsul a fost scris la întrebarea ta originală și nu la cea nouă. Pur și simplu faci o buclă prin matricea rezultată și setezi valoarea fiecărui element la ceva. Știi cum se face o buclă printr-un array, nu? –  > Por Esailija.
jabclab

Puteți folosi document.querySelectorAll() pe browserele moderne (https://developer.mozilla.org/En/DOM/Document.querySelectorAll), de exemplu.

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

Pentru browserele mai vechi va trebui să iterați pe inputs și să verificați valoarea, de ex.

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

Esailija
var elems = [].filter.call( document.getElementsByTagName("input"), function( input ) {
    return input.value === "something";
});

http://jsfiddle.net/ts2Rr/3/

Chris

Ceva de genul acesta funcționează:

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

Cu toate acestea, utilizarea jQuery ar fi mult mai bună.

Comentarii

  • returnează doar prima, totuși. –  > Por Thilo.
JamesHalsall

Ceva de genul acesta ar trebui să funcționeze…

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

Editare: Aceasta va returna o matrice cu toate meciurile.

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

Comentarii

  • adevărat, o modificare rapidă va rezolva acest lucru –  > Por JamesHalsall.
Grant Miller

Acest lucru ar putea fi peste bord în majoritatea cazurilor, dar o metodă alternativă ar fi să folosiți document.evaluate cu o expresie XPath pentru a selecta câmpul de intrare în funcție de valoare:

let result = document.evaluate(
  '//input[@value="something"]',
  document,
  null,
  XPathResult.ANY_TYPE,
  null
).iterateNext();

result.value = 'someOtherValue';

Notă: Această metodă nu este suportată de Internet Explorer.

În caz contrar, utilizați una dintre celelalte metode menționate pentru o mai bună compatibilitate și viteză a browserului.

Erik Österling

Dacă doriți toate elementele după ID, puteți utiliza

function getElementsById(elementID){
    var elementCollection = new Array();
    var allElements = document.getElementsByTagName("*");
    for(i = 0; i < allElements.length; i++){
        if(allElements[i].id == elementID){
            elementCollection.push(allElements[i]);
        }
    }
    return elementCollection;
}