使用 data-attribute 遍历 div 中的每个 child

Loop through each child in a div with data-attribute

我有多个 <div>,基于 <select>,其中每个都包含多个 <input>,有时还包含一个具有固定值的禁用 <select>。现在我试图遍历每个 divs 并将所有输入和 select 值放入 array 并将该数组推入 "master"数组。

然而这似乎不太奏效。
我觉得我已经接近但到目前为止。 :(

var dummy = [];
    for(var i = 1; i <= toSend.count; i++){
        var temp = [];
        $("div[data-row="+i+"]").children('input, select').each(function(){
            temp.push( $(this).val() );
        });

        dummy.push(temp);
    };

    console.log(dummy); 

toSend.count 是对 div 和 data-row 存在的计数。
HTML 看起来像这样:

<div id="container">
   <div data-row="1">
      <input type="text"/>
      <input type="text"/>
   </div>
   <div data-row="2">
     <input type="text"/>
     <input type="text"/>
  </div>
</div>  

啊哈,算了,这是我自己的蠢事!我正在通过 AJAX
生成 div 我自己复制粘贴了一个错误。
所有 div 都有 data-row=1,难怪它全部打包在一个数组中 >。<

您想要实现的目标的简短代码。

$("div[data-row="+i+"]")each(function(){ 
    $(this).children('input, select').each(function(){
        console.log(  $(this).val());
        console.log("Child Change");
    });
      console.log("Div Change");
});

。jquery 中的每个函数都不是同步的,请改用 for。

var $tmp;

for(var i = 1; i <= toSend.count; i++)
{
     $tmp = $("div[data-row="+i+"]").children('input, select');

     for(var ii = 1,len = $tmp.length; ii <= len; ii++){
        console.log(  $tmp.eq(ii).val());
     };

     console.log("New line #" + i);
};

(编辑:付费阅读代码更完整)

由于 toSend 变量只是具有 data-row 属性的 DIV,因此无需循环 toSend 来查找 DIV:

var dummy = [];

$("#container div[data-row]").each(function() {
    var temp = [];

    $(this).children("input, select").each(function() {
        temp.push(this.value);
    });

    dummy.push(temp);
});

在此之后,您甚至可能根本不需要 toSend 变量。