2017-07-01 85 views
1

我對這個主題做了很多研究,但沒有取得任何成功。jQuery prev在表格上無法正常工作

問題

當我試圖根據當時它不能正常工作的自定義屬性rowspanxrowspan

我如何根據rowspanx製作rowspan?

,所以我試圖找到以前的元素和下一個元素與prevAllnextAll

,如果我發現prevAll() > 1比它應該工作,但它不能正常工作。它只適用於一次而不是第二次。

我得到意想不到的輸出。它在代碼片段中。

我的預期輸出如下。

expected output

編輯

我的邏輯是,如果當前元素tdrowspanx==1所以查詢應檢查其所有previousnext元素有rowspanx == 2如果發現true任何siblings elements比目前tdrowspan = 2

這是我的邏輯,但它不能正常工作。

需要幫助!

$('table.overview-table tr').each(function() 
 
{ 
 
\t $($(this).find("*")).each(function(i) 
 
\t { 
 
\t \t if($(this).attr("rowspanx") == 1 && $(this).attr("rowspanx") != undefined && ($(this).prevAll().attr("rowspanx") > 1 || $(this).nextAll().attr("rowspanx") > 1)){ 
 
\t \t \t $(this).attr("rowspan","2"); 
 
\t \t } 
 
\t }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table width="100" border="1" class="table overview-table"> 
 
    <tr style="display: table-row;"> 
 
     <th scope="row" class="" rowspan="2">10:00</th> 
 
     <td class="orange white" rowspan="1" rowspanx="2" style="height: 20px;">test</td> 
 
     <td class="grey white" rowspan="1" rowspanx="2" style="height: 20px;">test</td> 
 
     <td class="orange" rowspan="1" rowspanx="1" style="height: 20px;"></td> 
 
     <td class="orange" rowspan="1" rowspanx="1" style="height: 20px;"></td> 
 
    </tr> 
 
    <tr style="display: table-row;"> 
 
     <td class="orange fat" rowspan="1" rowspanx="1" style="height: 20px;"></td> 
 
     <td class="grey fat" rowspan="1" rowspanx="1" style="height: 20px;"></td> 
 
     </tr> 
 
</table>

+0

爲什麼你在另一個jQuery對象包裝一個jQuery對象? '$($(本).find( 「*」))'。另外,這個'$(this).prevAll()。attr(「rowspanx」)'沒有意義,因爲'.prevAll()'返回一個** DOM節點**集合,並且它們的屬性不能全部訪問一旦。 – Terry

+0

@Terry那麼我怎樣才能達到我的預期產出? –

+0

什麼是精確的單元跨越邏輯?:在jquery腳本中,如果以前具有屬性'rowspanx = 2',則編碼在此處,則下一個單元跨越兩行。 OK,第三個單元格的屬性爲'rowspanx = 2',第四個單元格跨越兩行。第五個不是,因爲前一個沒有屬性'rowspanx = 2'。 – sbrbot

回答

0

爲了簡單起見,CSS類被省略:

<table width="100" border="1" id="table"> 
    <tr> 
    <th rowspan="2">10:00</th> 
    <td rowspan="1" rowspanx="2">test</td> 
    <td rowspan="1" rowspanx="2">test</td> 
    <td rowspan="1" rowspanx="1"></td> 
    <td rowspan="1" rowspanx="1"></td> 
    </tr> 
    <tr> 
    <td rowspan="1" rowspanx="1"></td> 
    <td rowspan="1" rowspanx="1"></td> 
    </tr> 
</table> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> 
$('#table tr td').each(function() 
{ 
    if($(this).attr("rowspanx")==1) 
    { 
    $(this).attr("rowspan","2"); 
    } 
}); 
</script> 

Example of JSFiddle

+0

好吧,讓我試試這個例子 –

+0

這段代碼會導致你需要的表格,但我不確定這是否完成了我們的行跨越邏輯。當你想要通過兩行的單元格的行跨越時,你沒有解釋算法。如前所述,您不能使用prevAll()但prev(),因爲prevAll()返回一組標籤(而不是之前的標籤)。如果你想要做一些事情以前所有的(或下一個)標籤,你必須遍歷所有的標籤。 – sbrbot

+0

否您的登錄不起作用,因爲如果任何人有'rowspanx == 2'而不是當前元素應該是'rowspan = 2',我必須找到所有先前或下一個元素 –