2011-03-30 108 views
0

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

但是,看起来'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); 
}); 
+0

它似乎是工作... – Neal 2011-03-30 19:47:13

+0

点击“显示更少” – Dutchie432 2011-03-30 19:49:21

回答

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); 
}); 
+0

没错 - 因为有问题的元素不能加载页面过程中可以发现,点击事件不作为处理程序附加。 Neal指出,.live()方法会为你解决这个问题。 @Neal - 您在“..live” – 2011-03-30 19:54:46

+0

@ Dutchie432中出现语法错误,感谢您修复错误:-) – Neal 2011-03-30 19:56:07

+0

我第一次需要使用.live ....感谢您的提示! – 2011-03-30 20:01:36

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); 
});