如何使用querySelector检索div第一个子元素兄弟节点?
How to retrieve the div first child element sibling node using querySelector?
我有如下 DOM 结构
<div class="table_body">
<div class="table_row">
<div class="table_cell">first</div>
<div class="table_cell">chocolate products</div><!-- want to access this div content -->
</div>
<div class="table_row">
<div class="table_cell">third</div>
<div class="table_cell">fourth</div>
</div>
</div>
从上面 HTML 我想访问第一个 table_row
div 中类名 table_cell
的第二个 div 的 div 内容.
所以基本上我想检索 div 类名 table_cell
的内容和内容巧克力产品。
我试过像下面那样做
const element = document.querySelector('.rdt_TableBody');
const element1 = element.querySelectorAll('.rdt_TableRow')[0]
const element2 = element1.querySelectorAll('.rdt_TableCell')[0].innerHTML;
当我记录 element2
值时,它给出了一些奇怪的输出,而不是文本“巧克力产品”
谁能帮我解决这个问题。谢谢。
在你的代码中
element1.querySelectorAll('.table_cell')[0]
,这是针对第一个元素,即 <div class="table_cell">first</div>
。这就是您没有获得预期输出的原因。
我已经到达 element1.querySelectorAll('.table_cell')[1]
,因此它将以 <div class="table_cell">chocolate products</div>
为目标。
const element = document.querySelector('.table_body');
const element1 = element.querySelectorAll('.table_row')[0]
const element2 = element1.querySelectorAll('.table_cell')[1].innerHTML;
console.log(element2);
<div class="table_body">
<div class="table_row">
<div class="table_cell">first</div>
<div class="table_cell">chocolate products</div>
</div>
<div class="table_row">
<div class="table_cell">third</div>
<div class="table_cell">fourth</div>
</div>
</div>
由于您要定位的元素是具有 class table_cell
的最后一个 div
,您可以在 table_cell
上使用 :last-of-type
class 使用 document.querySelector
。但除此之外,如果有超过 2 个元素并且您想定位第一个和最后一个之间的任何元素,您也可以使用 :nth-of-type
。
下面是使用 :last-of-type
的例子。
const elem = document.querySelector(".table_row > .table_cell:last-of-type");
console.log(elem?.innerHTML);
<div class="table_body">
<div class="table_row">
<div class="table_cell">first</div>
<div class="table_cell">chocolate products</div> //want to access this div content
</div>
<div class="table_row">
<div class="table_cell">third</div>
<div class="table_cell">fourth</div>
</div>
</div>
更多信息请参考:nth-of-type
, :last-of-type
and child combinator(>)
。
您可以使用:
:nth-of-type
pseudo-selector
- 结合 immediate-child 选择器 (
>
)
示例:
const selectedDiv = document.querySelector('.table_body > div:nth-of-type(1) > div:nth-of-type(2)');
工作示例:
const selectedDiv = document.querySelector('.table_body > div:nth-of-type(1) > div:nth-of-type(2)');
selectedDiv.style.color = 'white';
selectedDiv.style.backgroundColor = 'red';
<div class="table_body">
<div class="table_row">
<div class="table_cell">first</div>
<div class="table_cell">chocolate products</div> //want to access this div content
</div>
<div class="table_row">
<div class="table_cell">third</div>
<div class="table_cell">fourth</div>
</div>
</div>
我有如下 DOM 结构
<div class="table_body">
<div class="table_row">
<div class="table_cell">first</div>
<div class="table_cell">chocolate products</div><!-- want to access this div content -->
</div>
<div class="table_row">
<div class="table_cell">third</div>
<div class="table_cell">fourth</div>
</div>
</div>
从上面 HTML 我想访问第一个 table_row
div 中类名 table_cell
的第二个 div 的 div 内容.
所以基本上我想检索 div 类名 table_cell
的内容和内容巧克力产品。
我试过像下面那样做
const element = document.querySelector('.rdt_TableBody');
const element1 = element.querySelectorAll('.rdt_TableRow')[0]
const element2 = element1.querySelectorAll('.rdt_TableCell')[0].innerHTML;
当我记录 element2
值时,它给出了一些奇怪的输出,而不是文本“巧克力产品”
谁能帮我解决这个问题。谢谢。
在你的代码中
element1.querySelectorAll('.table_cell')[0]
,这是针对第一个元素,即<div class="table_cell">first</div>
。这就是您没有获得预期输出的原因。
我已经到达 element1.querySelectorAll('.table_cell')[1]
,因此它将以 <div class="table_cell">chocolate products</div>
为目标。
const element = document.querySelector('.table_body');
const element1 = element.querySelectorAll('.table_row')[0]
const element2 = element1.querySelectorAll('.table_cell')[1].innerHTML;
console.log(element2);
<div class="table_body">
<div class="table_row">
<div class="table_cell">first</div>
<div class="table_cell">chocolate products</div>
</div>
<div class="table_row">
<div class="table_cell">third</div>
<div class="table_cell">fourth</div>
</div>
</div>
由于您要定位的元素是具有 class table_cell
的最后一个 div
,您可以在 table_cell
上使用 :last-of-type
class 使用 document.querySelector
。但除此之外,如果有超过 2 个元素并且您想定位第一个和最后一个之间的任何元素,您也可以使用 :nth-of-type
。
下面是使用 :last-of-type
的例子。
const elem = document.querySelector(".table_row > .table_cell:last-of-type");
console.log(elem?.innerHTML);
<div class="table_body">
<div class="table_row">
<div class="table_cell">first</div>
<div class="table_cell">chocolate products</div> //want to access this div content
</div>
<div class="table_row">
<div class="table_cell">third</div>
<div class="table_cell">fourth</div>
</div>
</div>
更多信息请参考:nth-of-type
, :last-of-type
and child combinator(>)
。
您可以使用:
:nth-of-type
pseudo-selector- 结合 immediate-child 选择器 (
>
)
示例:
const selectedDiv = document.querySelector('.table_body > div:nth-of-type(1) > div:nth-of-type(2)');
工作示例:
const selectedDiv = document.querySelector('.table_body > div:nth-of-type(1) > div:nth-of-type(2)');
selectedDiv.style.color = 'white';
selectedDiv.style.backgroundColor = 'red';
<div class="table_body">
<div class="table_row">
<div class="table_cell">first</div>
<div class="table_cell">chocolate products</div> //want to access this div content
</div>
<div class="table_row">
<div class="table_cell">third</div>
<div class="table_cell">fourth</div>
</div>
</div>