2012-01-23 80 views
0

當窗口寬度低於500px時,我正在對我的網站進行表格顯示優化,其中我希望表格只有2列;標題,預告片。jQuery鏈接if語句

截至目前,我鏈接是這樣的:

var $rows = $(".zn-listviewtable tr"); 
if ($rows.children('td').length > 3) { 
    $rows.find("td:gt(2)").remove().end().find("th:gt(2)").remove().end().find("td:lt(1)").remove().end().find("th:lt(1)").remove(); 
} 

正如你可以看到我有一個if語句檢查,如果有超過3列(或td的),如果是這樣,那麼刪除所有即> 2和< 1.

唯一的字段是< 1是每行中的複選框字段。並非我所有的表格都有這個字段,所以我只想將remove()應用於那些擁有它的人。

是有辦法的鏈接,而不是分裂它,然後開始遍佈在一個單獨的一個,避免它結束了這樣的過程中,以檢查此:

var $rows = $(".zn-listviewtable tr"); 
if ($rows.children('td').length > 3) { 
    $rows.find("td:gt(2)").remove().end().find("th:gt(2)").remove(); 
} 
if ($rows.children('td').find('input:checkbox').length > 0) { 
    $rows.find("td:lt(1)").remove().end().find("th:lt(1)").remove(); 
} 
+0

也許只是一種個人品位的事情,但我會避免單線鏈接,並嘗試使代碼簡單明瞭。如果那涉及臨時變量,那就這樣吧。向列添加類名還可能使代碼更易於閱讀,並避免列索引。例如。 '$ rows.find(「。col1,.col4,.col5」)。remove()',其中col1,col4和col5是cols的合理名稱(例如.title,.teaser)。 –

回答

1

首先,它更容易寫:

$rows.find("td:gt(2)").remove().end().find("th:gt(2)").remove().end().find("td:lt(1)").remove().end().find("th:lt(1)").remove(); 

爲:

$rows.find("td:gt(2),th:gt(2),td:eq(0),th:eq(0)").remove(); 

如果你想鏈一切你」您需要指定一個類別爲table s,其中有第一列複選框(或第一個td個S和th

否則,您可以:

if ($rows.find('td:eq(0):has(input[type="checkbox"])').length) 
    $rows.find("td:eq(0),th:eq(0)").remove(); 

$rows.find("td:gt(1),th:gt(1)").remove(); 

哪個有條件刪除複選框列,並留下2列

1

你要找的這個插件:jQuery iff: A chainable "if" statement

它可以讓你重寫這個:

function my_test(x) { 
    return x === 'bar'; 
} 

var elem = $('div'); 
elem.append('1'); 
if (my_test('foo')) { 
    elem.append('2'); 
} 
elem.append('3'); 

...這個:

function my_test(x) { 
    return x === 'bar'; 
} 

$('div') 
    .append('1') 
    .iff(my_test, 'foo') 
    .append('2') 
    .end() 
    .append('3'); 

在每個例子中,'2'因爲my_test函數調用返回false'1''3'之間追加。

如果傳遞給iff的參數是true,或者是被調用時返回true的函數,則傳遞所有選定的元素。否則,所有元素將被刪除,並且一個空的jQuery對象將被傳遞。如果傳遞一個函數引用,則任何以下參數都將傳遞給該函數。

在回調中,this引用jQuery元素集合。請注意,iff被認爲是「破壞性」遍歷操作,即使沒有元素被移除,也可以使用.end()進行還原。

你的代碼可以被重寫如下:

$(".zn-listviewtable tr") 
    .iif(function() { 
    return this.children('td').length > 3; 
    }) 
    .find("td:gt(2), th:gt(2), td:lt(1), th:lt(1)").remove();