2012-02-15 84 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。