Heim > Web-Frontend > js-Tutorial > Hauptteil

N Möglichkeiten, Elemente in JS und deren dynamische und statische Diskussionen zu erhalten

jacklove
Freigeben: 2018-05-21 14:09:27
Original
1450 Leute haben es durchsucht

Beim Erlernen von JavaScript werden Sie auf das Problem stoßen, dass js Elemente erhält. In diesem Artikel wird die Methode zum Abrufen von Elementen erläutert.

Bei der eigentlichen Front-End-Entwicklungsarbeit stoßen wir häufig auf die Notwendigkeit, bestimmte Elemente abzurufen, um den Stil, den Inhalt usw. des Elements zu aktualisieren. Das Document Object Model (DOM) ist eine Programmierschnittstelle für HTML- und XML-Dokumente. Es bietet eine strukturierte Darstellung des Dokuments und definiert eine Möglichkeit, vom Programm aus auf die Struktur zuzugreifen und so die Struktur und den Stil des Dokuments und des Inhalts zu ändern. Das DOM analysiert ein Dokument in eine strukturierte Sammlung von Knoten und Objekten (Objekte, die Eigenschaften und Methoden enthalten), die Webseiten mit Skripten oder Programmiersprachen verbinden. Daher kann JavaScript Elementknoten über die DOM-API abrufen. Die Methoden lauten wie folgt: querySelector() und querySelectorAll() sind die ES5-Elementauswahlmethoden

1:

Empfängt ein Parameter: Die ID des abzurufenden Elements (Groß-/Kleinschreibung beachten, muss strikt übereinstimmen), gibt ein Elementobjekt zurück (kann auch als dynamische NodeList-Sammlung betrachtet werden, aber die Sammlung enthält nur ein übereinstimmendes Element, wird aber auch reflektiert Wenn das Element mit einer bestimmten ID im aktuellen Dokument nicht vorhanden ist, wird nul zurückgegeben.
Syntax:

element = document.getElementById(id);

Beispiel: Löschen

<body>
    <div id="myDiv">
        <p class="myP">hello world</p>
        <p class="myP">hello dolby</p>
        <p class="myP">hello dot</p>
        <p class="myP">hello bean</p>
    </div>
    <script>
        var div = document.getElementById("myDiv");        console.log(div); //(1)
        var body=document.querySelector(&#39;body&#39;);
        body.removeChild(div);        console.log(body); //(2)
    </script></body>
//(1)处打印值    <div id="myDiv">
        <p class="myP">hello world</p>
        <p class="myP">hello dolby</p>
        <p class="myP">hello dot</p>
        <p class="myP">hello bean</p>
    </div>//(2)处打印值<body>
    <script>
        var div = document.getElementById("myDiv");        console.log(div); //(1)
        var body=document.querySelector(&#39;body&#39;);
        body.removeChild(div);        console.log(body); //(2)
    </script></body>
Nach dem Login kopieren

Beispiel:

<!DOCTYPE html><html><head>
  <title>getElementById example</title>
  <script>
  function changeColor(newColor) {    var elem = document.getElementById("para1");
    elem.style.color = newColor;
  }  </script></head><body>
  <p id="para1">Some text here</p>
  <button onclick="changeColor(&#39;blue&#39;);">blue</button>
  <button onclick="changeColor(&#39;red&#39;);">red</button></body></html>
Nach dem Login kopieren

getElementById( )-Methode sucht nicht nach Elementen, die nicht im Dokument enthalten sind. Nachdem Sie ein Element erstellt und eine ID zugewiesen haben, müssen Sie insertBefore() oder andere ähnliche Methoden verwenden, um das Element in das Dokument einzufügen, bevor Sie getElementById() verwenden können, um Folgendes zu erhalten:

var element = document.createElement("div");
element.id = &#39;testqq&#39;;var el = document.getElementById(&#39;testqq&#39;); // el will be null!
Nach dem Login kopieren

getElementsByClassName():

Empfangt einen Parameter, bei dem es sich um eine Zeichenfolge handelt, die einen oder mehrere Klassennamen enthält (Klassennamen werden durch Leerzeichen getrennt), und gibt eine dynamische HTMLCollection-Sammlung zurück (man kann auch sagen, dass sie ein NodeList-ähnliches Array-Objekt zurückgibt). welches das aktuelle Element enthält Als Wurzelknoten alle untergeordneten Elemente mit angegebenen Klassennamen.
Syntax:

var elements = document.getElementsByClassName(names); 
var elements = rootElement.getElementsByClassName(names);
Nach dem Login kopieren

getElementsByClassName kann für jedes Element aufgerufen werden, nicht nur für Dokumente. Das Element, das diese Methode aufruft, wird als Stammelement für diese Suche verwendet.
Beispiel:

Alle Elemente mit der Klasse „test“ abrufen:

document.getElementsByClassName('test');

Alle Elemente einschließlich der Klasse Elements abrufen von 'red' und 'test':

document.getElementsByClassName('red test');

Im untergeordneten Knoten des Elements mit der ID „main“ alle Elemente abrufen mit Klasse 'test':

document.getElementById('main').getElementsByClassName('test');

Beispiel: Löschen

//html代码<div class="myDiv">
        <p class="myP">hello world</p>
        <p class="myP">hello dolby</p>
        <p class="myP">hello dot</p>
        <p class="myP">hello bean</p>
    </div>
//js代码一    <script>
        var div = document.getElementsByClassName("myDiv");        console.log(div); //(3)
        var p = document.getElementsByClassName("myP");        for (var i = 0; i < p.length; i++) {
            div[0].removeChild(p[i]);
        }        console.log(p); //(4)
    </script>
Nach dem Login kopieren

/ /Print value at (3)
[div.myDiv] //Eine dynamische HTMLCollection-Sammlung mit einer Länge von 1 und innerHTML von

hello dolby

,

hello bean

, warum es keine anderen zwei p-Elemente gibt, wird später erklärt.

//Wert bei (4) drucken
[p.myP,p.myP] //Eine dynamische HTMLCollection-Sammlung mit einer Länge von 2 und innerHTML bzw. „hello dolby“ und „hello bean“.

Die obige Methode zum Löschen von Knoten hat überprüft, dass die Methode getElementsByClassName eine dynamische HTMLCollection-Sammlung zurückgibt.

⬆️Im obigen Code erhält zunächst div eine dynamische Sammlung bestehend aus Elementen mit dem Klassennamen „myDiv“ auf der Seite, p erhält eine dynamische Sammlung bestehend aus Elementen mit dem Klassennamen „myP“ auf der Seite , und verwendet dann eine for-Schleife, um jedes Element in der „myP“-Auflistung im ersten Element in der „myDiv“-Auflistung (d. h. dem einzigen div-Element im obigen Beispiel) zu löschen. Daher nur das erste und das dritte Elemente werden gelöscht. Aus diesem Grund?
Der Grund dafür ist, dass Änderungen in der DOM-Struktur in der dynamischen Sammlung automatisch in den gespeicherten Objekten widergespiegelt werden können. Zunächst wird p.legth=4, wenn i=0, das erste p-Element auf der Seite gelöscht und danach p.legth=4 .length= 3; Wenn i=1, wird das Element mit Index 1 in den verbleibenden drei p gelöscht, und wenn p.length=2 ist, ist die Bedingung von i

Wie können Sie also jedes Element in der HTMLCollection-Sammlung arrayartiger Objekte durchlaufen und alle Elemente löschen?
Es wird immer noch mit einer for-Schleife gemacht⬇️, löschen Sie einfach jedes Mal das letzte Element in der Objektsammlung~

//js代码二    <script>
        var div = document.getElementsByClassName("myDiv")[0];        console.log(div); //(5)
        var p = document.getElementsByClassName("myP");        for (var i=p.length;i--;){
            div.removeChild(p[i]);
        }        console.log(p); //(6)
    </script>
//(5)处打印值<div class="myDiv"></div>//(6)处打印值[] //空的HTMLCollection集合,长度为0
Nach dem Login kopieren

3. getElementsByTagName():

Erhält einen Parameter: to be erhalten Der Tag-Name des Elements (ohne Berücksichtigung der Groß-/Kleinschreibung), gibt eine dynamische HTMLCollection-Sammlung zurück (man kann auch sagen, dass sie ein NodeList-Klassen-Array-Objekt zurückgibt), die Sammlung enthält das aktuelle Element als Stammknoten (mit Ausnahme des aktuellen Elements selbst). , alle angegebenen Tag-Namen Untergeordnete Elemente, die Reihenfolge der untergeordneten Elemente ist die Reihenfolge, in der sie im Unterbaum des aktuellen Elements erscheinen. Wenn kein Element gefunden wird, ist die Menge leer.
Syntax:

elements = element.getElementsByTagName(tagName)

Beispiel:

// check the alignment on a number of cells in a table. var table = document.getElementById("forecast-table"); 
var cells = table.getElementsByTagName("td"); 
for (var i = 0; i < cells.length; i++) { 
    var status = cells[i].getAttribute("data-status"); 
    if ( status == "open" ) { 
        // grab the data 
    }
}
Nach dem Login kopieren

Beispiel: Löschen Sie

<body>
    <div id="myDiv">
        <p class="myP">hello world</p>
        <p class="myP">hello dolby</p>
        <p class="myP">hello dot</p>
        <p class="myP">hello bean</p>
    </div>
    <script>
        var div = document.getElementById("myDiv");        console.log(div); //(7)
        var p = document.getElementsByTagName("p");//
Nach dem Login kopieren

以下for循环改为for (var i=0,len=p.length;i for (var i=p.length;i--;){
div.removeChild(p[i]);
} console.log(p); //(8)

与getElementByClassName相同,返回动态集合,所以循环删除结果也相同

//(7)处打印值

//(8)处打印值[] //空的HTMLCollection集合,长度为0

4、getElementsByName():

接收一个参数:带有给定name属性值的元素,返回一个动态NodeList类数组对象,对象中包含以当前元素为根节点,所有指定name属性值的子元素。最常用的场景是取得单选按钮。
示例:

<!DOCTYPE html><html lang="en"><head> ...</head><body>
<form name="up"><input type="text"></form><div name="down"><input type="text"></div>
<script>var up_forms = document.getElementsByName("up");console.log(up_forms[0].tagName); // returns "FORM"</script></body></html>
Nach dem Login kopieren

示例:删除

<body>
    <div id="myDiv">
        <input type="radio" name="fav-color">red        <input type="radio" name="fav-color">green        <input type="radio" name="fav-color">blue    </div>
    <script>
        var div = document.getElementById("myDiv");        console.log(div); //(9)
        var ipt_favCol = document.getElementsByName("fav-color");        for (var i = ipt_favCol.length; i--;) {
            div.removeChild(ipt_favCol[i]);
        }        console.log(ipt_favCol); //(10)
    </script></body>
Nach dem Login kopieren

getElementByName返回的是一个NodeList动态集合

//(9)处打印值

"red""green""blue"
//(10)处打印值[] //空的NodeList集合,长度为0

5、querySelector():

接收一个参数:一个包含一个或多个CSS 选择器的字符串(多个选择器以逗号分隔),返回匹配指定CSS选择器的第一个元素节点(无法选中CSS伪元素),没有发现匹配的节点则返回null。
语法:

element = document.querySelector(selectors);

示例:一个强大的选择方式

<div class="user-panel main">   
 <input name="login"/> //这个标签将被返回</div><script>  
  var el = document.querySelector("div.user-panel.main input[name=login]");
</script>
Nach dem Login kopieren

示例:如果要匹配的ID或选择器不符合 CSS 语法(比如不恰当地使用了冒号或者空格),你必须用反斜杠将这些字符转义。由于 JavaScript 中,反斜杠是转义字符,所以当你输入一个文本串时,你必须将它转义两次(一次是为 JavaScript 字符串转义,另一次是为 querySelector 转义):

<div id="foo\bar"></div><div id="foo:bar"></div><script>
  console.log(&#39;#foo\bar&#39;)               // "#fooar"
  document.querySelector(&#39;#foo\bar&#39;)    // 不匹配任何元素
  console.log(&#39;#foo\\bar&#39;)              // "#foo\bar"
  console.log(&#39;#foo\\\\bar&#39;)            // "#foo\\bar"
  document.querySelector(&#39;#foo\\\\bar&#39;) // 匹配第一个div
  document.querySelector(&#39;#foo:bar&#39;)    // 不匹配任何元素
  document.querySelector(&#39;#foo\\:bar&#39;)  // 匹配第二个div</script>
Nach dem Login kopieren

示例:删除

   <div id="myDiv">
        <p class="myP">hello world</p>
        <p class="myP">hello dolby</p>
        <p class="myP">hello dot</p>
        <p class="myP">hello bean</p>
    </div>
    <script>
        var div = document.getElementById("myDiv");        console.log(div); //(11)
        var p = document.querySelector("p");
        div.removeChild(p);        console.log(p); //(12)
    </script>
Nach dem Login kopieren
//(11)处打印值    <div id="myDiv">
        <p class="myP">hello dolby</p>
        <p class="myP">hello dot</p>
        <p class="myP">hello bean</p>
    </div>//(12)处打印值        <p class="myP">hello world</p> //如你所见,querySelector也是静态的快照
Nach dem Login kopieren

6、querySelectorAll():

接收一个参数:一个包含一个或多个CSS 选择器的字符串(多个选择器以逗号分隔),返回静态NodeList对象集合,该集合中包含匹配指定CSS选择器的所有节点,元素节点的变化无法实时反映在结果中;如果参数中包含CSS伪元素则返回一个空的对象集合。
语法:

elementList = document.querySelectorAll(selectors);

示例:

var matches = document.querySelectorAll("div.note, div.alert");

示例:删除

   <div id="myDiv">
        <p class="myP">hello world</p>
        <p class="myP">hello dolby</p>
        <p class="myP">hello dot</p>
        <p class="myP">hello bean</p>
    </div>
    <script>
        var div = document.getElementById("myDiv");        console.log(div); //(13)
        var p = document.querySelectorAll("p");        for (var i = 0; i < p.length; i++) {
            div.removeChild(p[i]);
        }        console.log(p); //(14)
    </script>
Nach dem Login kopieren

//(13)处打印值

//(13)处打印值
[p.myP,p.myP,p.myP,p.myP] //返回的是静态NodeList集合,元素节点的变化无法实时反映在结果中

7、elementFromPoint():

接收两个参数:分别是相对于当前窗口左上角的横纵坐标,单位为CSS像素,不需要加单位;返回位于页面指定位置的元素,如果该元素不可返回(如滚动条)则返回它的父元素,如果坐标值无意义(如负值)则返回null。
语法

var element = document.elementFromPoint(x, y);

示例:

<!DOCTYPE html><html lang="en"><head><title>elementFromPoint example</title><script>function changeColor(newColor) {  elem = document.elementFromPoint(2, 2);  elem.style.color = newColor;}</script>
</head><body>
<p id="para1">Some text here</p><button onclick="changeColor(&#39;blue&#39;);">blue</button>
<button onclick="changeColor(&#39;red&#39;);">red</button></body></html>
Nach dem Login kopieren

这一个获取元素的方法用得不多所以不多做介绍。

是不是觉得看了上面这些头好大啊,什么是动态什么是静态,有没有好记一点的方法呢?
有哒!

你可以简单地理解为,getElementBy系列返回的都是动态的HTMLCollection集合,动态集合中的DOM结构变化能实时地反映到所保存的对象中,而querySelector系列返回的都是静态的NodeList对象,是一个快照,对DOM的任何操作都不会对其产生影响。

那么Nodelist和HTMLCollection有什么异同呢?

相同点:

二者都是类数组对象

二者都具有length属性

二者都具有item()方法

二者都是动态的元素集合,每次访问都需要重新对文档进行查询。

你一定会好奇,诶?前面不是说querySelector系列返回的都是静态的NodeList对象咩?怎么又变成动态的呢?原因在此:
规范中对 querySelectorAll 有明确要求,规定其必须返回一个静态的 NodeList 对象。
在Chrome中情况如下:

document.querySelectorAll(&#39;a&#39;).toString();    // return "[object NodeList]"document.getElementsByTagName(&#39;a&#39;).toString();    // return "[object HTMLCollection]"
Nach dem Login kopieren

不同点:

NodeList 对象会包含文档中的所有节点,如 Element、Text 和 Comment 等;HTMLCollection  对象只会包含文档中的 Element 节点

本篇对hs获取元素进行了详细的讲解,更多相关内容请关注php中文网。

相关推荐:

JavaScript全总结之DOM的Element

实现jquery懒加载、回到顶部

关于this的相关问题

Das obige ist der detaillierte Inhalt vonN Möglichkeiten, Elemente in JS und deren dynamische und statische Diskussionen zu erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!