如何 select 具有动态 ID 的父元素的嵌套子元素?

How can I select a nested child element of a parent element that has a dynamic ID?

我目前正在研究 Zendesk,并试图对页面上的文本元素进行更改。遗憾的是,Zendesk 的元素是动态的,主要元素的名称会在每次页面加载时发生变化。

谢天谢地,元素树的结构保持相当稳定,但只有父元素的名称在变化:

#ember6030 > div.comment > div > p
#ember3483 > div.comment > div > p

目前,这是我目前所处的位置:

var item = document.querySelectorAll("[name^=ember] > div.comment > div > p");
var itemtext = item.innerHTML;
console.log(itemtext);

我确定我遗漏了什么,但我的选择器变量不正确吗?

有点像找到一个以 "ember" 开头但随后跟随父子树的其余部分的元素就好了。


编辑:事情比我想象的要顽固一些,但如果这有帮助,我会提供一些额外的细节:对于 div.comment > div > p 元素,其中一些加载了。目前,我想尝试只针对一个,但如果我能在控制台消息中获取所有这些元素的文本内容,那就太棒了。

对于那些 CSS 您将使用的路径:

var item = document.querySelector("[id^=ember] > div.comment > div > p");
var itemtext = item.textContent;
console.log(itemtext);

因为 #id 属性的 CSS 选择器,而不是 name

另请参阅 关于节点列表。

所以最终代码是:

var items = document.querySelectorAll("[id^=ember] > div.comment > div > p");
items.forEach (item => {
  var itemtext = item.textContent;
  console.log(itemtext);
} );

最后,对于您似乎想要做的事情,您可能想要 textContent 而不是 innerHTML。这避免了对属性、注释等的错误命中

document.querySelectorAll returns 必须迭代的 NodeList。您应该能够使用 forEach 遍历 querySelectorAll 选择的元素。

var items = document.querySelectorAll("[id^=ember] > div.comment > div > p");
items.forEach (item => {
  var itemtext = item.textContent;
  console.log(itemtext);
} );