Maison  >  Questions et réponses  >  le corps du texte

Que renvoient les méthodes querySelectorAll et getElementsBy* ?

<p><code>getElementsByClassName</code> (et des fonctions similaires telles que <code>getElementsByTagName</code> et <code>querySelectorAll</code>) fonctionne avec <code>getElementById</code> c'est pareil ? Renvoyer un tableau d'éléments ? </p> <p>La raison pour laquelle je demande est parce que j'essaie de changer le style de tous les éléments en utilisant <code>getElementsByClassName</code>. voir ci-dessous. </p> <pre class="brush:php;toolbar:false;">//ne fonctionne pas document.getElementsByClassName('myElement').style.size = '100px'; //travaux document.getElementById('myIdElement').style.size = '100px';</pre></p>
P粉060112396P粉060112396443 Il y a quelques jours582

répondre à tous(2)je répondrai

  • P粉904405941

    P粉9044059412023-08-25 17:17:22

    Vous utilisez des tableaux comme objets, getElementbyId et getElementsByClassName est :

    getElementsByClassName

    https://www.w3.org/ TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname

    Obtenir ElementById

    https://developer.mozilla.org/en- US/docs/Web/API/Document/getElementById

    Incluez les lignes suivantes dans votre code :

    ne fonctionnera pas comme prévu car getElementByClassName renverra un tableau, et ce tableau n'a pas getElementByClassName将返回一个数组,并且该数组具有样式< /code> 属性,您可以通过迭代来访问每个元素 d'attribut style auquel vous pouvez accéder en itérant dans chaque < code >Élément.

    C'est l'attribut de la fonction getElementById 为您工作的原因,该函数将返回直接对象。因此,您将能够访问 style.

    répondre
    0
  • P粉520545753

    P粉5205457532023-08-25 16:48:41

    VotregetElementById 代码之所以有效,是因为 ID 必须是唯一的,因此该函数始终只返回一个元素(如果没有找到,则返回 null).

    Cependant, ces méthodes getElementsByClassName, getElementsByName, getItemByTagName, et getElementsByTagNameNS Renvoie une collection itérable d’éléments.

    Les noms de méthodes fournissent des indices : getElement 暗示单数,而getElements implique pluriel .

    Methods querySelector renvoient également un seul élément et querySelectorAll renvoie une collection itérable.

    La collection itérable peut être NodeListHTMLCollectionNodeList ou

    HTMLCollection < /code>

    un>. getElementsByNamequerySelectorAll 均指定返回 节点列表;其他 getElementsBy* 方法 指定返回 < code>HTMLCollection

    document.getElements() 读取 style et NodeListHTMLCollection 没有 style;只有 Element 具有 stylequerySelectorAll

    spécifient tous deux de renvoyer la 🎜liste de nœuds ;Autre 🎜getElementsBy* méthode🎜 spécifie de renvoyer < code>HTMLCollection, veuillez toutefois noter que certaines versions de navigateur implémentent cela différemment. 🎜 🎜Ces deux types de collections ne fournissent pas les mêmes propriétés que les éléments, nœuds ou types similaires ; c'est pourquoi lire 🎜style< depuis 🎜document.getElements…🎜(…🎜) / code> Raison de l’échec. En d'autres termes : 🎜NodeList ou 🎜HTMLCollection n'a pas de 🎜style ; seul 🎜Element a 🎜style ; 🎜

    Ces collections « de type tableau » sont des listes de zéro ou plusieurs éléments sur lesquels vous devez parcourir pour y accéder. Bien que vous puissiez les parcourir comme des tableaux, veuillez noter qu'ils ne sont pas les mêmes que noreferrer">s. 数组 Dans les navigateurs modernes, vous pouvez utiliser

    Array.from

     ; vous pouvez ensuite utiliser forEach et d'autres méthodes array comme les méthodes d'itération Array.from;那么您可以使用 forEach :

    Array.from(document.getElementsByClassName("myElement"))
      .forEach((element) => element.style.size = "100px");
    
    Dans les anciens navigateurs qui ne prennent pas en charge Array.from ou les méthodes d'itération, vous pouvez toujours utiliser

    . Ensuite, vous pouvez le parcourir comme un vrai tableau : Array.prototype.slice.call

    var elements = Array.prototype.slice
        .call(document.getElementsByClassName("myElement"));
    
    for(var i = 0; i < elements.length; ++i){
      elements[i].style.size = "100px";
    }
    
    Vous pouvez également itérer

    lui-même, mais notez que dans la plupart des cas, ces collections sont

    liveNodeListHTMLCollection (documentation MDN, spécification DOM), c'est-à-dire qu'elles se mettent à jour à mesure que le DOM change. Donc, si vous insérez ou supprimez des éléments pendant une boucle, assurez-vous de ne pas accidentellement sauter certains éléments ou créer une boucle infinie. La documentation MDN doit toujours indiquer si une méthode renvoie une collection live ou une collection statique. Par exemple,

     :

    document.querySelectorAll(".myElement")
      .forEach((element) => element.style.size = "100px");
    
    NodeList 提供了一些迭代方法,例如现代浏览器中的 forEachVous pouvez également utiliser une simple

    boucle :

    var elements = document.getElementsByClassName("myElement");
    
    for(var i = 0; i < elements.length; ++i){
      elements[i].style.size = "100px";
    }
    
    forNarration :

    .childNodes< /a> génère une

    live NodeList et .children.childNodes< /a> 产生一个 live NodeList.children 生成一个 live HTMLCollection génère un

    live
    HTMLCollection, donc ces deux getters doivent également être gérés avec se soucier.

    Il existe des bibliothèques comme

    jQuery🎜 qui raccourcissent les requêtes DOM et créent une couche d'abstraction sur "un élément" et une "collection d'éléments": 🎜
    $(".myElement").css("size", "100px");
    

    répondre
    0
  • Annulerrépondre