11
votes

Enchaînement GetElementyID

Je cherche une réponse à cette question mais je ne pourrais en trouver aucun donc je pensais que j'essayais Stackoverflow.

en JavaScript, est-ce valide:

x = document.getelementByID ('myid'); y = x.getelementbyid ('mysecondid');

Je sais que cela peut être fait avec getelementsbytagname mais je ne sais pas si l'objet renvoyé par getElementyid est capable d'utiliser le getElementyid Méthode.

Je sais que l'ID est censé être unique par document, mais ce n'est parfois pas le cas.

merci!


2 commentaires

Considérez jQuery .


Ou MOTOWOOLS (qui étend l'objet domelement pour prendre en charge un getElementyid méthode).


6 Réponses :


0
votes

Nope.

Seul le document est la méthode getElementyid par défaut.

Même si x était un iframe ou quelque chose, vous devez toujours accéder à d'autres propriétés ou quoi que ce soit avant de recevoir un autre getElementyid . .


0 commentaires

3
votes

Eh bien, le meilleur moyen de savoir est de l'essayer. Dans ce cas, cela ne fonctionnera pas, car la méthode getElementyID est uniquement disponible sur les objets DOMDOCUMUMUMUMUMENT (par exemple, le document variable) et non Domelement Objets, qui sont des nœuds individuels. Je pense que cela aurait dû être disponible sur ceux-ci aussi, mais bon, je suis en désaccord avec la majeure partie de la conception des API DOM ...


0 commentaires

7
votes

Nope.

... mais vous pouvez, bien que: p> xxx pré>

Essayez sur cette page: p>

Element.prototype.getElementById = function(req) {
    var elem = this, children = elem.childNodes, i, len, id;

    for (i = 0, len = children.length; i < len; i++) {
        elem = children[i];

        //we only want real elements
        if (elem.nodeType !== 1 )
            continue;

        id = elem.id || elem.getAttribute('id');

        if (id === req) {
            return elem;
        }
        //recursion ftw
        //find the correct element (or nothing) within the child node
        id = elem.getElementById(req);

        if (id)
            return id;
    }
    //no match found, return null
    return null;
}


2 commentaires

Ne faites pas cela, s'il vous plaît. Il est inutile que vous puissiez simplement écrire document.getelementByID () au lieu d'étendre le prototype d'élément, il ne sert donc que de compliquer votre base de code et de confondre l'enfer hors des développeurs qui hériteront du projet. Zéro bénéfice.


Ne pas prolonger l'objet que vous ne possédez pas. Stackoverflow.com/ Questions / 14034180 / ...



0
votes

Pensez à ne pas utiliser ID quand il y a plus d'un

Peut-être un attribut de classe ou personnalisée est peut-être meilleur, vous pouvez ensuite utiliser document.Quiseryselectorall code> à les pinces. p>

els = document.querySelectorAll('[custom-attr]')


0 commentaires


3
votes

Vous pouvez simplement utiliser y = x.queryselector ('#' + 'mysecondid'); au lieu de y = x.getelementbyid ('mysecondid'); L'échantillon de la question.

élément.getelementByID n'existe pas, mais vous pouvez l'ajouter comme mentionné dans d'autres réponses, même s'il n'est pas recommandé d'ajouter une méthode à élément < / code>. Si vous souhaitez utiliser absolument ce type de solution, ci-dessous est une possibilité: xxx

Un avantage à utiliser élément.queryselector au lieu de document.getelementBeyID intérieure élément.pototype.getelementByID Est-ce que Element.Quiseryselector fonctionne même si l'élément n'est pas déjà dans le DOM, comme après la création avec document.createelement .


0 commentaires