ホームページ  >  記事  >  ウェブフロントエンド  >  JS を解析してノードを取得し、互換性のためにノードをカプセル化する方法

JS を解析してノードを取得し、互換性のためにノードをカプセル化する方法

藏色散人
藏色散人転載
2022-08-06 17:18:301947ブラウズ

#この記事では主に JS でのノードの取得方法と互換性カプセル化について紹介します。必要!

ノード

Web ページのコンテンツはタグで構成されています (完全に正しいわけではありません)

Web ページのコンテンツはノードで構成されています
要素ノード属性ノード テキスト ノード コメント ノード ドキュメント ノード
ノードの 3 つの要素

    #ノード タイプ:nodeType
  • ノード名:nodeName
  • ノード値:nodeValue
			节点类型(nodeType)			节点名称( nodeName)		节点值(nodeValue)
元素节点				1						标签名大写						null属性节点				2						属性名							属性值
文本节点				3						#text							文本
注释节点				8						#comment						注释内容
文档节点				9						#document						null
親ノードの取得

親ノードの取得:

子要素.parentNode

子要素の取得

		<div id = "box">
			<!--宫崎骏-->
			<div>千与千寻</div>
			<div id="box2">哈儿的移动城堡</div>
			龙猫
			<div>悬崖上的金鱼姬</div>
		</div>

var box2 = document.getElementById("box2");console.log(box2.parentNode);
取得した親ノード要素ノードである必要があります (要素のみが子ノードを持ちます)

子要素をページに追加します(親要素内)

Parent element.appendChild(child element)

すべての子ノードを取得

		<div id="box" style="width: 100px; height: 100px;">
			<div id="box1" style="background-color: lightblue;">千与千寻</div>
			<div id="box2">哈尔的移动城堡</div>
		</div>
		<script type="text/javascript">
			var box =  document.getElementById("box")
			console.log(box.chilNodes);
		</script>

1.兄弟要素と兄弟ノード

兄弟ノードを取得

<div id = "box">
			<!--宫崎骏-->
			<div>千与千寻</div>
			<div id="box2">哈儿的移动城堡</div>
			龙猫
			<div>悬崖上的金鱼姬</div>
		</div>

取得要素:

var box = document.getElementById("box");var box2 = document.getElementById("box2");
前のノード

console.log(box2.previousSibling);  // 文本节点
次のノード

console.log(box2.nextSibling);  // 文本节点
兄弟要素の取得

前の要素

 console.log(box2.previousElementSibling);
次の要素

console.log(box2.nextElementSibling);
IE8 は兄弟要素の取得操作をサポートしていません。要素があり、結果は unknown であり、IE8 には代替手段がありません

IE8 はノードを通じて兄弟要素のインテリジェンスを取得したいと考えています

前の兄弟要素のパッケージを取得します

@ param ele: 検索するターゲット パッケージ

@return node: 要素を返します。node

 	function getPreviousElement(ele) {
            // 能力检测
            if(ele.previousElementSibling)  {  // 谷歌火狐
                return ele.previousElementSibling;
            } else {  // IE8
                // 获取上一个节点  :  null  元素  文本  注释
                var node = ele.previousSibling;
              
              // 循环次数不确定
              // 1. node必须存在, 不是null,  2. node不是元素节点
              while(node != null && node.nodeType != 1) {
                 node =  node.previousSibling              }
              // node == null  或者  node.nodeType == 1
              return node;
            }
        }

        console.log(getPreviousElement(li2));
2. 最初の子ノードと子要素を取得します

最初のノードと子要素を取得します

最初の子ノードを取得します:

Parent element.firstChild 最初の子要素を取得します:
Parent element.firstElementChild

var box = document.getElementById("box");console.log(box.firstChild);console.log(box.firstElementChild);
IE8 ではできません要素の操作を実行します

最初の子要素の互換性パッケージを取得します

			function getFirstElementChild(ele) {
                if (ele.firstElementChild != undefined) {
                    return ele.firstElementChild;
                } else {
                    var nodeFirst = ele.firstChild;
                    while (nodeFirst && nodeFirst.nodeType == 1) {
                        nodeFirst = nodeFirst.nextSibling;
                    }
                    return nodeFirst;
                }
            }
            console.log(ul.firstElementChild);

3. 最後の子ノードと子要素を取得します

最後の子ノードを取得し、子要素

最後の A 子ノードを取得します:

Parent element.lastChild 最後の子要素を取得します:
Parent element.lastElementChild

var box = document.getElementById("box");console.log(box.lastChild);console.log(box.lastElementChild);
最後の子要素の互換性パッケージを取得します

        function firstElement(ele) {
            if (ele.firstElementChild) {//谷歌和火狐
                return ele.firstElementChild;
            }
            else {//IE8
                var node = ele.firstChild;
                while (node != null && node.nodeType != 1) {
                    node = node.nextSibling;
                }
                return node;
            }

        }
        console.log(firstElement(ul))

4. クローン ノード

クローン ノード:

Element.cloneNode(parameter) パラメーター:
パラメータがある場合:

  • パラメータが true の場合、ディープ クローン作成を意味します。このタグとタグ内のすべてのコンテンツをクローンできます。

  • パラメータが false の場合、浅い複製を意味します。現在のタグのみが複製され、このタグのコンテンツは複製されません。

  • #パラメータはありません。デフォルトは false です。
<div id="box"> 
    I&#39;m a big box
      <h1>我是标题</h1>
 </div>
var box = document.getElementById("box");var Newbox = box.cloneNode(true)console.log(New);

    複製されたノードはメモリ内に複製されるだけで、ページには追加されません。手動でのみ追加できます
  • クローン huibaid もクローンされます。 以前は
  • ページIDの一意性を維持するために、クローンされた要素のIDを変更する必要がありました
Newbox.id = "Newbox"

タオバオの場合、QR コードを非表示にする

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>关闭二维码</title>
		<style type="text/css">
			#box{
				width: 94px;
				height: 92px;
				margin: 30px auto;
				position: relative;
			}
			#x{
				width: 14px;
				height: 14px;
				line-height: 14px;
				border: 1px solid #D9D9D9;
				color: #D6D6D6;
				text-align: center;
				position: absolute;
            	top: 0;
            	left: -15px;
			}
			#img{
				width: 76px;
				height: 90px;
				background-image: url(img/erweima.png);
			}
		</style>
	</head>
	<body>
		<div id="box">
			<div id="x">x</div>
			<div id="img"></div>
		</div>
		
		<script type="text/javascript">
			var x = document.getElementById("x")
			x.onclick = function(){
				this.parentNode.style.display = &#39;none&#39;;
			}
		</script>
	</body>
</html>

関連する推奨事項:【

JavaScript ビデオ チュートリアル

以上がJS を解析してノードを取得し、互換性のためにノードをカプセル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。