我正在尝试使用JQuery UI编写一个函数,该函数接受一行的id并隐藏所有其他具有id的行,其中id作为参数传递给函数。 (如果单击父行,我正在尝试折叠子行等。)
例如
如果传递的id为'1',则应隐藏ID为'11','111','12','121','122'等的所有行,但不应将ID为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 :(得分:1)
你可以在那里扔.not
来做到这一点:
$('tr[id^=%s]'.replace('%s',divId)).not('#' + divId).hide...
旁注1:我认为我不会在那里使用replace
,一般情况下你应该用引号括住属性值(尽管你已经显示了ID值,但你可以没有引号,因为它们没有空格;一般来说这只是一个好主意)。 E.g:
$('tr[id^="' + divId + '"]'.not('#' + divId).hide...
旁注2:id
以数字开头的值为not valid in CSS;他们不能以数字开头。它们在invalid in HTML之前也是HTML5,这扩大了允许值的范围。由于jQuery使用CSS样式选择器,因此在使用jQuery时,我倾向于坚持使用最严格的ID值形式(CSS)。 FWIW。