JAvascriptベースの検索要素の詳細(アクセスノード)
2936 ワード
もちろんこれらのセレクタはjQuery拡張のいくつかの方法ですが、原生jsを使用する場合はどのように要素を検索しますか?今日は簡単に整理してみましょう.
DOMは、一般的に使用されているgetElementById()のほかに、getElementsByTagName()とgetElementsByName()の様々な要素を検索する方法を定義しています.これらの方法では、htmlドキュメント内の任意のhtml要素を検索できます.
getElementById()まずgetElementById()を見てみましょう.この方法は簡単です.htmlページのidが一意であるため、この方法は単一の要素オブジェクトを返します.例:
getElementsByTagName()getElementsByTagName()パラメータはhtmlタグ名を入力する必要があります.htmlドキュメント内のすべての一致する要素のリストを返します.このリストは一部の配列の特性を持つため、クラス配列とも呼ばれます.特定の要素を操作したい場合は、配列インデックスまたはitem()を使用して実装できます.たとえば、次のようになります.
もちろん、lengthプロパティを使用してノードをループすることもできます.
getElementsByName()getElementsByName()は、フォーム要素を検索するためによく使用されます.パラメータにhtmlタグのname属性値が入力されます.ドキュメント内の複数のhtmlタグのname値が同じ(ラジオボタンなど)場合があるため、このメソッドは要素リストを返します.具体的な操作方法はgetElementsByTagName()と似ていますが、ここでは説明しません.
getByClass()は、上記のいくつかの方法で一般的なニーズを満たすことができますが、要素ノードへのアクセスを容易にするために、classを使用して要素を検索する方法を独自にカプセル化します.
getByClassは、oParentが参照ノード、すなわちoParentノードで要素を検索し、sClassが検索する要素classの値である2つのパラメータを入力する必要があります.oParent内のhtmlタグのclass値と入力したsClass値をループすることで、条件に合致するものは配列aResultに格納され、最後にこの配列に戻ります.
なお、ここでは、aEle[i]を直接用いることなく正則でマッチングする.className==sClassは、ラベルのclass値が複数の場合、一致が無効になることを回避します.
DOMは、一般的に使用されているgetElementById()のほかに、getElementsByTagName()とgetElementsByName()の様々な要素を検索する方法を定義しています.これらの方法では、htmlドキュメント内の任意のhtml要素を検索できます.
getElementById()まずgetElementById()を見てみましょう.この方法は簡単です.htmlページのidが一意であるため、この方法は単一の要素オブジェクトを返します.例:
span
<br> var oSpan = document.getElementById('span1'); // span
<br> alert(oSpan.innerHTML); // span
<br>
getElementsByTagName()getElementsByTagName()パラメータはhtmlタグ名を入力する必要があります.htmlドキュメント内のすべての一致する要素のリストを返します.このリストは一部の配列の特性を持つため、クラス配列とも呼ばれます.特定の要素を操作したい場合は、配列インデックスまたはitem()を使用して実装できます.たとえば、次のようになります.
<br> var oDiv = document.getElementsByTagName('div'); // div ,
<br> /* */
<br> alert(oDiv[0].innerHTML) // div
<br> alert(oDiv.item(1).innerHTML) // div
<br>
もちろん、lengthプロパティを使用してノードをループすることもできます.
<br> var oDiv = document.getElementsByTagName('div');
<br> for(var i = 0; i < oDiv.length; i++){
<br> //do something
<br> }
<br>
getElementsByName()getElementsByName()は、フォーム要素を検索するためによく使用されます.パラメータにhtmlタグのname属性値が入力されます.ドキュメント内の複数のhtmlタグのname値が同じ(ラジオボタンなど)場合があるため、このメソッドは要素リストを返します.具体的な操作方法はgetElementsByTagName()と似ていますが、ここでは説明しません.
<br> var oIpt= document.getElementsByName('city'); // name city
<br> alert(oIpt[0].value);
<br> alert(oIpt.item(1).value);
<br>
getByClass()は、上記のいくつかの方法で一般的なニーズを満たすことができますが、要素ノードへのアクセスを容易にするために、classを使用して要素を検索する方法を独自にカプセル化します.
<br> /** getByClass **/
<br> function getByClass(oParent, sClass){
<br> var aEle = oParent.getElementsByTagName('*');
<br> var re = new RegExp('\\b' + sClass + '\\b');
<br> var aResult = [];
<br> for(var i = 0; i < aEle.length; i++){
<br> if(re.test(aEle[i].className)){
<br> aResult.push(aEle[i]);
<br> }
<br> }
<br> return aResult;
<br> }
<br>
getByClassは、oParentが参照ノード、すなわちoParentノードで要素を検索し、sClassが検索する要素classの値である2つのパラメータを入力する必要があります.oParent内のhtmlタグのclass値と入力したsClass値をループすることで、条件に合致するものは配列aResultに格納され、最後にこの配列に戻ります.
なお、ここでは、aEle[i]を直接用いることなく正則でマッチングする.className==sClassは、ラベルのclass値が複数の場合、一致が無効になることを回避します.