获取所有子元素的 id

Posted

技术标签:

【中文标题】获取所有子元素的 id【英文标题】:get ALL id's of children elements 【发布时间】:2019-07-10 16:23:46 【问题描述】:

我如何获得一个数组或类似于 ALL 元素的 id 到某个 div 的东西?

假设我有这样的事情:

<div id="parent-div">
    <div id="div-no-1"></div>
    <div id="div-no-2"></div>
    <div id="div-no-3"></div>
    <div id="div-no-4"></div>
</div>

然后我想要一个看起来像这样的数组

parent-div [
    0: "div-no-1",
    1: "div-no-2",
    2: "div-no-3",
    3: "div-no-3"
];

我试过这个...

$("#parent-div > div").attr("id");

...但它只给了我第一个孩子的 id,例如div-no-1。我想要他们所有人

【问题讨论】:

您是要输出字符串数组还是 javascript 普通对象数组? 【参考方案1】:

使用jQuery的eachpushid到数组:

var parentDiv = [];
$("#parent-div > div").each((index, elem) => 
  parentDiv.push(elem.id);
);

console.log(parentDiv);
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<div id="parent-div">
    <div id="div-no-1"></div>
    <div id="div-no-2"></div>
    <div id="div-no-3"></div>
    <div id="div-no-4"></div>
</div>

【讨论】:

【参考方案2】:

如果您想在纯 JavaScript 中执行此操作,您只需获取父元素的子元素,然后循环遍历结果并将 id 推送到数组中。

var children = document.getElementById("parent-div").children;

var idArr = [];

for (var i = 0; i < children.length; i++) 
  idArr.push(children[i].id);


console.log(idArr);
<div id="parent-div">
    <div id="div-no-1"></div>
    <div id="div-no-2"></div>
    <div id="div-no-3"></div>
    <div id="div-no-4"></div>
</div>

【讨论】:

【参考方案3】:
var ids = [];

$("#parent-div > div").each(function( index ) 
    ids.push($(this).attr('id'));
);

【讨论】:

【参考方案4】:

使用$.map 替代 Jack Bashford 的解决方案:

const divIds = $.map($('#parent-div > div'), div => div.id);

console.log(divIds);
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<div id="parent-div">
  <div id="div-no-1"></div>
  <div id="div-no-2"></div>
  <div id="div-no-3"></div>
  <div id="div-no-4"></div>
</div>

或者,使用.map.get

const divIds = $('#parent-div > div').map((i, div) => div.id).get();

console.log(divIds);
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<div id="parent-div">
  <div id="div-no-1"></div>
  <div id="div-no-2"></div>
  <div id="div-no-3"></div>
  <div id="div-no-4"></div>
</div>

【讨论】:

【参考方案5】:

没有jquery的解决方案:

const elements = [...document.querySelectorAll('#parent-div *[id]')];

console.log(elements.map(( id ) => id));
<div id="parent-div">
    <div id="div-no-1"></div>
    <div id="div-no-2"></div>
    <div id="div-no-3"></div>
    <div id="div-no-4"></div>
</div>

【讨论】:

【参考方案6】:

试试map

var arr = jQuery.map($("#parent-div").children(), function (d) 
  return $(d).attr("id");
);
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="parent-div">
    <div id="div-no-1"></div>
    <div id="div-no-2"></div>
    <div id="div-no-3"></div>
    <div id="div-no-4"></div>
</div>

【讨论】:

【参考方案7】:

你可以试试这个:

// Make an empty arary to push ids into
var arrayOfIds = [];

// Select parent element
var parentElement = document.querySelector('#parent-div');

// Select child elements
var childElements = parentElement.querySelectorAll("div");

// Push the id attribute of every child element
// Into he previousely created array
for (var i = 0; i < childElements.length; i++) 
  arrayOfIds.push(childElements[i].getAttribute("id"));


console.log(arrayOfIds);
<div id="parent-div">
    <div id="div-no-1"></div>
    <div id="div-no-2"></div>
    <div id="div-no-3"></div>
    <div id="div-no-4"></div>
</div>

您可以使用.getAttribute("class") 以相同的逻辑获取所有元素的 CSS 类或任何其他属性。

【讨论】:

【参考方案8】:

您可以将.querySelectorAll() 与Descendant combinator 一起使用

Descendant 组合器(空格)组合器选择符合以下条件的节点 第一个元素的后代。语法:A B

"#parent-id [id]" 匹配所有具有id 属性的子节点,扩展语法将NodeList 转换为ArrayArray.prototype.map()

<div id="parent-div">
    <div id="div-no-1"></div>
    <div id="div-no-2"></div>
    <div></div>
    <div class="div-no-2-6-6"></div>
    <div id="div-no-3"></div>
    <div id="div-no-4"></div>
    text
</div>
<script>
  let ids = [...document.querySelectorAll("#parent-div [id]")].map((id) => id);
  console.log(ids);
</script>

【讨论】:

【参考方案9】:

这可以在纯 JavaScript 中使用 document.querySelectorAll('#paren-div &gt; div') 后跟 map() 和一些解构来获取 id 来完成。

const ids = [...document.querySelectorAll('#parent-div > div')].map(( id ) => id);

console.log(ids);
<div id="parent-div">
    <div id="div-no-1"></div>
    <div id="div-no-2"></div>
    <div id="div-no-3"></div>
    <div id="div-no-4"></div>
</div>

【讨论】:

以上是关于获取所有子元素的 id的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在 oracle 中提供子元素 ID 来获取所有父元素?

获取所有子元素的 id

Jquery 获取子元素问题

c#关于树节点怎么获取父节点下的所有子节点的ID

SQL通过父节点获取所有子节点

jq选择子元素