jquery局部展开和折叠

时间:2011-03-30 19:44:18

标签: javascript jquery faceted-search

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

然而,看起来'contains'选择器可能只是在最初加载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);
});

2 个答案:

答案 0 :(得分:5)

尝试使用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);
});

答案 1 :(得分:0)

你走在正确的道路上。如果您要查找“全部”这个短语,您需要在“显示所有品牌”和“显示更多品牌”之间做出决定。此外,没有理由将甚至处理程序绑定到同一个对象。可能更容易绑定一个,只需检查文本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);
});