2015-07-21 58 views
1

我知道我可以使用jQuery的.filter()進行屬性過濾。我也知道自從W3C正式實現HTML5中的數據事物以來,這種自定義屬性的使用就不受歡迎了。屬性大於傳遞變量的jQuery元素(.filter())

但我仍然想知道爲什麼這不起作用。

JS:

$("[id^=hide]").click(function() { 
    var lvl = $(this).attr('lvl'); 
    var id = $(this).attr('tar'); 

    $('#' + id).slideToggle(100); 

    $('div').filter(function(lvl) { 
     return $('this').attr('lvl') > lvl; 
    }).slideToggle(100); 
}); 

HTML:

<a id="hide1" lvl="0" tar="1"></a> 
<div id="1" lvl="0"></div> 
<a id="hide2" lvl="1" tar="2"></a> 
<div id="2" lvl="1"></div> 
<a id="hide3" lvl="2" tar="3"></a> 
<div id="3" lvl="2"></div> 
<a id="hide4" lvl="2" tar="4"></a> 
<div id="4" lvl="2"></div> 
<a id="hide5" lvl="1" tar="5"></a> 
<div id="5" lvl="1"></div> 
<a id="hide7" lvl="2" tar="7"></a> 
<div id="7" lvl="2"></div> 

我想實現的是。 1.點擊鏈接。 2. SlideToggle靠近鏈接的div。 3. SlideToggle其級別屬性大於該鏈接級別屬性的所有其他div。

我也試圖做這樣的:

$("[id^=hide]").click(function() { 
    var lvl = $(this).attr('lvl'); 
    var id = $(this).attr('tar'); 

    $('#' + id).slideToggle(100); 
    hideOthers(lvl); 
}); 

var hideOthers = function(lvl) { 
    $('div').filter(function(lvl) { 
     return $('this').attr('lvl')> lvl; 
    }).slideToggle(100); 
} 

但是,這也不能正常工作。有任何想法嗎?

+0

我認爲e.preventDefault()是必需的。 – jrath

回答

1

Updated Fiddle

在這一行:

$('div').filter(function(lvl) { 

lvl被認爲是jQuery中的索引filter()函數,所以函數裏面的lvl的值是[0-1-2 .... nbr_of_divs]

修復,只是從帕拉姆刪除lvl並直接使用它。

$('div').filter(function() { 
    return $(this).attr('lvl') > lvl; 
}).slideToggle(100); 

也卸下撇號(')從$(this)濾波器函數內部:

更換:

return $('this').attr('lvl')> lvl; 

通過:

return $(this).attr('lvl') > lvl; 

的它的工作,希望這有助於。

+0

啊!是的,我不知道爲什麼我把它放在撇號中。我做了正確的幾行。 我很確定我必須將lvl傳遞給函數,但它現在就像一個魅力。非常感謝。 –

0

可以使用車削操作位置:在你的代碼

return $('this').attr('lvl')> lvl ? lvl : $('this').attr('lvl');