获取所有id的children元素

时间:2019-02-16 21:17:19

标签: javascript jquery html html5 ecmascript-6

如何获取数组或类似 ALL 某个div的元素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>

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

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。我要所有人

9 个答案:

答案 0 :(得分:10)

对数组使用jQuery的eachpush id

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>

答案 1 :(得分:9)

使用$.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>

答案 2 :(得分:6)

这可以在普通JavaScript中使用document.querySelectorAll('#paren-div > 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>

答案 3 :(得分:4)

如果要使用纯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>

答案 4 :(得分:4)

没有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>

答案 5 :(得分:4)

尝试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>

答案 6 :(得分:4)

您可以尝试以下方法:

// 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类。

答案 7 :(得分:4)

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

  

后代组合器(空格)组合器选择以下节点:   第一个元素的后代。语法: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>

答案 8 :(得分:3)

var ids = [];

$("#parent-div > div").each(function( index ) {
    ids.push($(this).attr('id'));
});
相关问题