1

我正在使用 jquery 'contains' 选择器来确定单击 div 时要执行的操作...我想展开或折叠分面导航的一部分。

但是,看起来“包含”选择器可能仅在最初加载 DOM 时查看 div 的内容,并且看不到由较早的 jquery 调用换出的较新内容。

我有一个主要功能版本在这里工作......只需要一点点推动即可使顶部正确折叠:http: //jsfiddle.net/brianadkins/nAabP/


HTML:

<div class="facetname" id="facetname-fbr">
        Brand
    </div>
    <ul class="facetvalues" id="facetvalues-fbr">
        <li>facet1val1</li>
        <li>facet1val2</li>
        <li>facet1val3</li>
        <li>facet1val4</li>
        <li>facet1val5</li>
        <li>facet1val6</li>
        <li>facet1val7</li>
        <li>facet1val8</li>
        <li>facet1val9</li>
        <li>facet1va10</li>
        <li>facet1val11</li>
        <li>facet1val12</li>
        <li>facet1val13</li>
    </ul>
    <div class="slidermenu" id="slidermenu-fbr">
    </div>

Javascript:

var ListLengthHidingTrigger = 7;
var InitialListItems = 4;

if ($("#facetvalues-fbr li").length > ListLengthHidingTrigger) {
    $("#facetvalues-fbr li:gt("+(InitialListItems-1)+")").hide(); // hide all but first N sections
    $('#slidermenu-fbr').html('Show All Brands');
}
$('div#slidermenu-fbr:contains("All")').click(function() {
                $('#facetvalues-fbr li').show(); // hide all but first 2 sections
                $('#slidermenu-fbr').html('Show Fewer Brands');            
});
$('div#slidermenu-fbr:contains("Fewer")').click(function() {
                $("#facetvalues-fbr li:gt("+(InitialListItems-1)+")").hide(); // hide all but first N sections
                $('#slidermenu-fbr').html('Show More Brands');            
});
$('#facetname-fbr').click(function() {
    $('#facetvalues-fbr').slideToggle(0);
});
4

2 回答 2

6

尝试使用jQuery live()

http://jsfiddle.net/maniator/nAabP/8/

代码:

var ListLengthHidingTrigger = 7;
var InitialListItems = 4;

if ($("#facetvalues-fbr li").length > ListLengthHidingTrigger) {
    $("#facetvalues-fbr li:gt("+(InitialListItems-1)+")").hide(); // hide all but first N sections
    $('#slidermenu-fbr').html('Show All Brands');
}
$('div#slidermenu-fbr:contains("All")').live('click',function() {
                $('#facetvalues-fbr li').show(); // hide all but first 2 sections
                $('#slidermenu-fbr').html('Show Fewer Brands');            
});
$('div#slidermenu-fbr:contains("Fewer")').live('click',function() {
                $("#facetvalues-fbr li:gt("+(InitialListItems-1)+")").hide(); // hide all but first N sections
                $('#slidermenu-fbr').html('Show All Brands');            
});
$('#facetname-fbr').click(function() {
    $('#facetvalues-fbr').slideToggle(0);
});
于 2011-03-30T19:49:16.320 回答
0

你走在正确的道路上。如果要查找短语“All”,则需要在“Show All Brands”和“Show More Brands”之间做出决定。此外,没有理由将偶数处理程序绑定到同一个对象。可能更容易绑定一个,只需检查文本All或类似的东西。另外,使用live()

http://jsfiddle.net/Jaybles/nAabP/7/

var ListLengthHidingTrigger = 7;
var InitialListItems = 4;

if ($("#facetvalues-fbr li").length > ListLengthHidingTrigger) {
    $("#facetvalues-fbr li:gt("+(InitialListItems-1)+")").hide(); // hide all but first N sections
    $('#slidermenu-fbr').html('Show All Brands');
}
$('#slidermenu-fbr').live('click',function() {
    if ($(this).text().indexOf('All') >0){
        $('#facetvalues-fbr li').show(); // hide all but first 2 sections
        $('#slidermenu-fbr').html('Show Fewer Brands');            
    }else{
        $("#facetvalues-fbr li:gt("+(InitialListItems-1)+")").hide(); // hide all but first N sections
        $('#slidermenu-fbr').html('Show All Brands');         
    }
});

$('#facetname-fbr').click(function() {
    $('#facetvalues-fbr').slideToggle(0);
});
于 2011-03-30T19:54:36.537 回答