2017-01-06 79 views
-1

發表了一個類似的問題,但可能是這種情況會更有意義。有許多第一個td的tr,在不同的tr中有一個重複的第一個td。我正在使用這些進行識別。我想從第二個tr中抽取一個值,並將其插入到第一個tr中已經附加的(!)td中。下面是一個簡單的HTML代碼示例獲取相同變量類的元素值

<div class="tableclass"> 
    <table> 
    <tbody> 
     <tr> 
     <td>id1</td> 
     <td>something else</td> 
     <td>1</td> 
     </tr> 
     <tr> 
     <td>id2</td> 
     <td>something else</td> 
     <td>2</td> 
     </tr> 
     <tr> 
     <td>id2</td> 
     <td>something else</td> 
     <td>3</td> 
     </tr> 
     <tr> 
     <td>id3</td> 
     <td>something else</td> 
     <td>4</td> 
     </tr> 
     <tr> 
     <td>id1</td> 
     <td>something else</td> 
     <td>5</td> 
     </tr> 
    <tbody> 
    </table> 
<div> 

這裏是我的jQuery代碼

$(".tableclass table tbody tr").each(function(){ 
    $(this).append('<td class="fbctr"></td>'); 
    var trclass = $(this).find("td:first-child").html(); 
    $(this).addClass(trclass); 
    // this is where I'm having a problem 
    var fbctr = $(this).parent().filter(trclass).eq(2).find("td:nth-child(3)"); 
    $(this).find(".fbctr").html(fbctr); 
}); 
+0

你到底去那裏嗎? 'fbctr'的期望值是多少? –

+0

因此,基本上你想獲得重複類的行的第三個單元格的內容,並用當前行的'fbctr'類將它複製到子元素中? – EhsanT

+0

是[這個簡單的小提琴](https://jsfiddle.net/z1n69fwt/)你在找什麼? – EhsanT

回答

0

OK,你的問題是,jquery.filter()作品一組給定的DOM元素。因此,您必須首先選擇<tr>元素,然後使用.filter()。在你的問題你申請它在你的<table>

所以,你的JavaScript代碼將是這樣的:

$(".tableclass table tbody tr").each(function(){ 
    var trclass = $(this).find("td:first-child").html(); 
    $(this).addClass(trclass); 
    var fbctr = $(this).parent().find('tr').filter('.'+trclass).eq(1).find("td:nth-child(3)").html(); 
    if(typeof fbctr !== "undefined"){ 
     console.log(fbctr); 
     $(this).find(".fbctr").html(fbctr); 
    } 
}); 

更新(更正的代碼):

如果你要複製的值第一個發生元素爲第二個發生元素,請使用此代碼:

$(".tableclass table tbody tr").each(function(){ 
    var trclass = $(this).find("td:first-child").html(); 
    $(this).addClass(trclass); 
    var elements = $(this).parent().find('tr').filter('.'+trclass); 
    if(elements.length > 1){ 
     var fbctr = elements.eq(0).find("td:nth-child(3)").html(); 
     if(typeof fbctr !== "undefined") 
     $(this).find(".fbctr").html(fbctr); 
    } 
}); 

而如果你想第二出現的元素的值複製到第一出現的元素,使用此代碼:

$(".tableclass table tbody tr").each(function(){ 
    var trclass = $(this).find("td:first-child").html(); 
    $(this).addClass(trclass); 
    var elements = $(this).parent().find('tr').filter('.'+trclass); 
    var fbctr = elements.eq(1).find("td:nth-child(3)").html(); 
    if(typeof fbctr !== "undefined") 
     $('.'+trclass).not(this).find(".fbctr").html(fbctr); 
}); 
+0

這樣,它將值插入到相同的tr它得到的值從 – hahna

+0

行,那麼你想用第二個元素替換第一個元素的內容,反之亦然?也許我們可以採取另一種方法... – EhsanT

+0

我想從第二個tr中獲取信息,並將它放入第一個tr中添加的td中。 – hahna

0

你可以先過濾掉重複的行並刪除所有重複行但不是第一行,然後在第一行中追加最後一個重複行的第3個td元素。

在下面的解決方案中,我也刪除重複的行,您可以保留/刪除基於您的要求。

這裏是工作的解決方案,我添加了幾個額外的節點來測試解決方案。

var rows = $(".tableclass table tbody tr") 
 
rows.each(function() { 
 
    var trclass = $(this).find("td:first-child").html(); 
 
    $(this).addClass(trclass); 
 
    var dupeRows = rows.filter("." + trclass); 
 
    rows.filter("." + trclass).not(":first").remove(); 
 
    if (dupeRows.length > 1) { 
 
    rows.filter("." + trclass).first().append('<td>' + $(dupeRows[dupeRows.length - 1]).find("td:nth-child(3)").html() + '</td>'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="tableclass"> 
 
    <table> 
 
    <tbody> 
 
     <tr> 
 
     <td>id1</td> 
 
     <td>something else</td> 
 
     <td>1</td> 
 
     </tr> 
 
     <tr> 
 
     <td>id2</td> 
 
     <td>something else</td> 
 
     <td>2</td> 
 
     </tr> 
 
     <tr> 
 
     <td>id2</td> 
 
     <td>something else</td> 
 
     <td>3</td> 
 
     </tr> 
 
     <tr> 
 
     <td>id3</td> 
 
     <td>something else</td> 
 
     <td>4</td> 
 
     </tr> 
 
     <tr> 
 
     <td>id1</td> 
 
     <td>something else</td> 
 
     <td>5</td> 
 
     </tr> 
 
     <tr> 
 
     <td>id2</td> 
 
     <td>something else</td> 
 
     <td>5</td> 
 
     </tr> 
 
     <tr> 
 
     <td>id2</td> 
 
     <td>something else</td> 
 
     <td>8</td> 
 
     </tr> 
 
     <tbody> 
 
    </table> 
 
    <div> 
 
    ;

+0

@hahna對您有幫助嗎? – Deep