我正在尝试从包含无序列表并具有 CSS display: none 值(即隐藏的 div)的 div 中获取内容,并将某些列表元素放入占位符 div 以根据对应于复选框的某些值进行显示列表元素的类。
在初始显示和未选中复选框时,我希望隐藏 div 中的所有列表元素都显示在占位符 div 中。
当复选框被选中时,我想执行一个函数,该函数采用所有选中的复选框值,并将隐藏的 div 带到占位符 div 中,仅列出具有与复选框值对应的类值的列表元素。不应该显示隐藏 div 中没有相应复选框值的那些列表元素。
这是HTML:
<div id="php_hidden_results">
<ul id="vv_bg_results">
<li class="Sauces_Dips_Spreads Latin">Chili Lime Sour Cream</li>
<li class="Main_Dish Latin">Carnitas</li>
</ul>
<ul id="vv_content_wrapper_results">
<li class="Sauces_Dips_Spreads Latin"><div class="vv_content" id="content1">
<h2><a href="/v1.0/recipes/show_recipe.php?idrecipe=22">Chili Lime Sour Cream</a></h2>
<div class="vv_content_box">
<div class='subtitle'>Sauces Dips Spreads: Latin</div>
</div>
</li>
<li class="Main_Dish Latin"><div class="vv_content" id="content2">
<h2><a href="/v1.0/recipes/show_recipe.php?idrecipe=21">Slow Cooker Carnitas</a></h2>
<div class="vv_content_box">
<div class='subtitle'>Main Dish: Latin</div>
</div>
</li>
</ul>
</div>
<div id="test">Replace with checked value</div>
<div class="filterContainerBody">
<b>RECIPE TYPES</b><br />
<div class="horzRule"></div>
<ul class="checkfilter">
<li><input type='checkbox' value='Sauces_Dips_Spreads' />Sauces Dips Spreads</li>
<li><input type='checkbox' value='Main_Dish' />Main Dish</li>
</ul>
<b>CUISINE TYPES</b><br />
<div class="horzRule"></div>
<ul class="checkfilter">
<li><input type='checkbox' value='Latin' />Latin</li>
</ul>
</div><!-- end of filterContainer -->
<div id="vv_bg" class="vv_bg">
<ul class="results">
<li></li>
</ul>
</div>
<div id="vv_content_wrapper" class="vv_content_wrapper">
<ul class="results">
<li></li>
</ul>
</div>
这是CSS:
#php_hidden_results
{
display: none;
}
.filterContainerBody
{
width: 240px;
display: block;
background-color: #ffbb00;
}
这是jQuery:
$(document).ready(function() {
$("ul.checkfilter :checkbox").click(function() {
var divhidden_bg_li = $('#php_hidden_results ul#vv_bg_results li');
$(".checkfilter :checkbox:checked").each(function(){
var filtervalue = $(this).val();
var filterclass = $(divhidden_bg_li).filter(filtervalue);
var divhidden_bg= $('#php_hidden_results ul#vv_bg_results').children("." + filtervalue);
$('#vv_bg ul.results').html(divhidden_bg);
var divhidden_content = $('#php_hidden_results ul#vv_content_wrapper_results').children("." + filtervalue);
$('#vv_content_wrapper').html(divhidden_content);
});
});
});
上面的 jquery 不会在初始页面或未选中复选框时显示所有列表元素,并且会在第一次检查时从隐藏的 div 中检索某些列表元素,但变得无响应。见http://jsfiddle.net/Ayjent/ddsjB/5/
我知道隐藏和显示,我工作得很好,除了我想避免的显示中的占位符问题。请参阅上面的 jsfiddle 代码(隐藏 div 中的 li 元素以前位于占位符 div 中)。我想避免使用 AJAX 进行连续的服务器调用,但这可能是更好的解决方案。
任何帮助将不胜感激。