2016-08-04 77 views
0

不知道如何正確命名問題,因此如果標題誤導,請爲標題道歉。jQuery通過.each()迭代,並根據第一個.each()提供迭代ID。

我有一個tables(約30〜)的列表,我從其他文件加載ajax,具體取決於sidebar menu用戶點擊哪個li data-id。並且每個table都有它自己的id和各自的inputtd它自己的id根據table idtable中的輸入數量。

即:table#id_1input#id_1--input2input2 CUS它在這個特定table第三input)。

我可以做手工寫的,但我按字母順序排序我的名單,所以如果我將要增加一個新的table將在list中間去,我將不得不重新編寫類似table's的一半, input'sid's這是一個不能。

,所以我試圖讓可以添加id attributetable基於table id它可以設置input id +在input年底的例子添加它的一個指標(如上面並在effect i want在功能片段末尾)。

var div = $('table'); 
 

 
div.each(function(index){ 
 
    var inputid = index - 2; 
 
    
 
    $(this).attr('id', 'id_'+index); 
 
    
 
    $('input').each(function(inputIndex){ 
 
    \t $(this).attr('id', 'id_'+inputid+'-input'+inputIndex); 
 
    }); 
 
});
div{ 
 
    margin-bottom: 20px; 
 
} 
 

 
span{ 
 
    background-color: black; 
 
    color: white; 
 
    padding: 2px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span>The effect i'm receiving:</span> 
 
<div> 
 
Table 1 //#id_0 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input0 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input1 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input2 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 2 //#id_1 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input3 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input4 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 3 //#id_2 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> ... 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> ... 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //input_0-input7 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<span>The effect I want:</span> 
 
<div> 
 
Table 1 //#id_0 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input0 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input1 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input2 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 2 //#id_1 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_1-input0 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_1-input1 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 3 //#id_2 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_2-input0 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_2-input1 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_2-input2 
 
    </td></tr> 
 
    </table> 
 
</div>

+0

你想做什麼?你爲什麼需要這些特定的'ID'? – Adjit

+0

嗯,可以'老老實實'。這只是一個先進的物理計算器(比如你可以計算黑洞溫度),我正在練習,每個表都有自己的公式和自己的計算。這就是爲什麼我有很多輸入,因爲我需要從它的每個值,然後到具體公式進行計算。 – nehel

回答

3

改變你的JavaScript代碼如下:

var div = $('table'); 

div.each(function(index){ 
    var inputid = index; 

    $(this).attr('id', 'id_'+index); 

    $(this).find('input').each(function(inputIndex){ 
    $(this).attr('id', 'id_'+inputid+'-input'+inputIndex); 
    }); 
}); 

通知的fourthe最後一行是

$(this).find('input').each(...)

你我們重申所有input s,而現在我們只是迭代input s在我們迭代的div中。

隨着用戶的McCrohan在評論中提到:
var inputid = index - 2;
是不必要的,應該是:
var inputid = index;

編輯https://jsfiddle.net/xxL5tuvw/

+0

打敗我吧。但是,如果需要所需示例中的精確形狀,則還應該將'index - 2'更正爲'index'。 (或完全刪除該行並更正以下參考) –

+0

同意,我應該編輯我的答案還是您的評論足夠? –

+0

@TimvanOsch我會立即糾正這個問題,謝謝你的回答,時間和解釋!欣賞(: – nehel

1

var div = $('div'); 
 

 
div.each(function(index){ 
 
    $(this).attr('id', 'id_'+index); 
 
    
 
    $('input', this).each(function(inputIndex){ 
 
    var id = 'id_'+index+'-input'+inputIndex; 
 
    $(this).attr('id', id).after('<span>' + id+ '</span>'); 
 
    // above .after() to show the id, u can remove it 
 
    }); 
 
});
div{ 
 
    margin-bottom: 20px; 
 
} 
 

 
span{ 
 
    background-color: black; 
 
    color: white; 
 
    padding: 2px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span>The effect i'm receiving:</span> 
 
<div> 
 
Table 1 //#id_0 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 2 //#id_1 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 3 //#id_2 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    </table> 
 
</div>