如何访问没有 ID 的 HTML 元素?

IT技术 javascript dom xhtml
2021-03-16 18:02:04

例如,在下面的代码段中 - 如何在知道父元素(header-inner div)的 ID 的情况下访问 h1 元素?

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

谢谢!

6个回答
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(会为您节省大量时间来编写这些东西,它会变得有些棘手)。

这是一个非常延迟的问题,但我如何确定我想要第一个、第二个、第三个还是更多的后代?
2021-04-22 18:02:04
干杯 - 脚本看起来很棒,我会尝试并标记为答案
2021-05-02 18:02:04
完全取决于您的需求,@brandon - 也许您想突出显示特定段落,也许您正在寻找具有特定内容的孩子。
2021-05-14 18:02:04
@Shog9 我正在寻找一个内容特别丰富的孩子
2021-05-16 18:02:04

如果你像一些海报提到的那样使用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'元素中的第一个标签

这应该是: document.getElementById('header-inner').getElementsByTagName('h1')[0].forstChild.nodeValue = 'new text';
2021-04-18 18:02:04

要获取子节点,请使用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;
    }
}