簡體   English   中英

如何訪問沒有 ID 的 HTML 元素?

[英]How to access HTML element without ID?

例如在下面的代碼片段中 - 我如何在知道父元素 ID(header-inner div)的情況下訪問 h1 元素?

<div id='header-inner'> 
   <div class='titlewrapper'> 
      <h1 class='title'> 
      Some text I want to change
      </h1> 
   </div> 
</div>

謝謝!

function findFirstDescendant(parent, tagname)
{
   parent = document.getElementById(parent);
   var descendants = parent.getElementsByTagName(tagname);
   if ( descendants.length )
      return descendants[0];
   return null;
}

var header = findFirstDescendant("header-inner", "h1");

查找具有給定 ID 的元素,查詢具有給定標簽名稱的后代,返回第一個。 您還可以循環descendants以按其他條件進行過濾; 如果你開始朝那個方向發展,我建議你檢查一個預先構建的庫,比如 jQuery(會為你節省大量的時間來編寫這些東西,它會有點棘手)。

如果您要使用一些海報中提到的jQuery ,您可以像這樣非常容易地訪問該元素(盡管從技術上講,如果有多個 H1 后代,這將返回一組匹配元素):

var element = $('#header-inner h1');

與其他帖子中提到的常規方法相比,使用 JQuery 之類的庫可以讓這種事情變得微不足道。 然后,一旦您在 jQuery 對象中引用了它,您就可以使用更多的函數來輕松地操作它的內容和外觀。

如果您確定 div 中只有一個 H1 元素:

var parent = document.getElementById('header-inner');
var element = parent.GetElementsByTagName('h1')[0];

正如 Shog9 所展示的,通過后代也是一個好方法。

使用當前標記的最簡單方法是:

document.getElementById('header-inner').getElementsByTagName('h1')[0].innerHTML = 'new text';

這假設您的 H1 標簽始終是'header-inner'元素中的第一個標簽。

要獲取子節點,請使用obj.childNodes ,它返回一個集合對象。

要獲得第一個孩子,請使用list[0] ,它返回一個節點。

所以完整的代碼應該是:

var div = document.getElementById('header-inner');
var divTitleWrapper = div.childNodes[0];
var h1 = divTitleWrapper.childNodes[0];

如果要遍歷所有子項,比較它們是否屬於“title”類,可以使用 for 循環和className屬性進行迭代。

代碼應該是:

var h1 = null;
var nodeList = divTitleWrapper.childNodes;
for (i =0;i < nodeList.length;i++){
    var node = nodeList[i];
    if(node.className == 'title' && node.tagName == 'H1'){
        h1 = node;
    }
}

在這里,我在具有 CSS class="myheader" 的 H1 元素的 div 中獲取 H1 元素值:

var nodes = document.getElementById("mydiv")
                    .getElementsByTagName("H1");

for(i=0;i<nodes.length;i++)
{
    if(nodes.item(i).getAttribute("class") == "myheader")
        alert(nodes.item(i).innerHTML);
}      

這是標記:

<div id="mydiv">
   <h1 class="myheader">Hello</h1>
</div>

如果您需要對 DOM 進行大量解析,我還建議您使用jQuery

自從提出和回答這個問題以來已經有幾年了。 在現代 DOM 中,您可以使用querySelector

 document.querySelector('#header-inner h1').textContent = 'Different text';
 <div id='header-inner'> <div class='titlewrapper'> <h1 class='title'> Some text I want to change </h1> </div> </div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM