2012-02-15 86 views
1

我正在嘗試使用JQuery UI編寫一個函數,該函數需要一行的id,並且隱藏所有其他行的ID都以ID開頭的ID作爲該函數的參數。 (我正在嘗試像摺疊子行一樣,如果父行被點擊)。匹配元素的ID以字符串開頭,而不僅僅匹配字符串

例如,

如果通過的ID是'1',則具有ID'11','111','12','121','122'等的所有行應該被隱藏,但不是ID爲只是'1'

如果通過的ID是'2',所有具有ID'21','211','22','221','222'等的行應該被隱藏但不是一個與ID爲只是「2」

目前,我想是這樣的:

$(function() { 
     // run the currently selected effect 
     function runEffect(divId) { 

      // set effect type 
      var selectedEffect = "blind"; 

      // most effect types need no options passed by default 
      var options = {}; 

      // run the effect 
      $('tr[id^=%s]'.replace('%s',divId)).hide(selectedEffect, options, 1000, callback); 
     }; 

     // callback function 
     function callback() { 

     }; 

     // set effect from select menu value 
     $("tr").click(function() { 
      var divId = this.getAttribute('id'); 
      runEffect(divId); 
      return false; 
     }); 
    }); 

這正常工作與只有一個問題。它也隱藏了傳入的id的行。因此,如果我點擊ID爲'1'的行,它會隱藏所有ID爲1的行和那些以1開頭的行。我只想隱藏所有其他以ID 1開頭的行,但不包含ID爲'1'的行, 。

Please help! 
+0

你沒有使用正則表達式(你也不需要),我已經刪除了標籤並更新了標題。 – 2012-02-15 10:16:57

回答

1

您可以在那裏扔.not做到這一點:

$('tr[id^=%s]'.replace('%s',divId)).not('#' + divId).hide... 

附註1:我不認爲我會用replace那裏,一般而言,您應環繞帶引號的屬性值(儘管使用您顯示的ID值,但沒有引號就沒關係,因爲它們沒有空格;通常這只是一個好主意)。例如: -

$('tr[id^="' + divId + '"]'.not('#' + divId).hide... 

邊注2:開始的數字是not valid in CSSid值;他們不能以數字開頭。在HTML5之前它們也是invalid in HTML,這擴大了允許值的範圍。由於jQuery使用CSS風格的選擇器,因此在使用jQuery時,我傾向於堅持最有限制的ID值形式(CSS)。 FWIW。