我需要为每个类别级别构建3个单独的选择框过滤器:
<div id="something">
<ul>
<li><a href="http://">Male</a>
<ul>
<li><a href="http://">BaseBall</a></li>
<li><a href="http://">Football</a>
<ul>
<li class="LastChild"><a href="http://">Bill</a></li>
<li class="LastChild"><a href="http://">Mike</a></li>
</ul>
</li>
<li class=""><a href="http://">Basketball</a></li>
</ul>
</li>
</ul>
<ul>
<li><a href="http://">Female</a>
<ul>
<li class="LastChild"><a href="http://">BaseBall</a></li>
</ul>
</li>
</ul>
</div>
我建立了第一级:
$("<select />",{"id": "gender"}).appendTo("#something");
$("<option />", {
"selected": "selected",
"value" : "",
"text" : "Gender"
}).appendTo(".gender select");
$("#something > ul > li > a").each(function() {
var kd = $(this);
$("<option />", {
"value" : kd.attr("href"),
"text" : kd.text()
}).appendTo("#something select");
});
这给了我:
<select id="gender">
<option>Male</option>
<option>Female</option>
</select>
现在我需要根据所选的孩子来构建我的第二个选择。
我迷失了
答案 0 :(得分:1)
一次完成所有这些。 Updated Demo
$(function() {
renderNextLevel('#something');
});
function renderNextLevel(parent) {
$(parent).children('ul').each(function() {
var height = $(this).parentsUntil('#something').length;
var current = $(parent).children('ul');
var sel = $('.sel' + height);
if (sel.length == 0) {
sel = $('<select />');
sel.attr('class', 'sel' + height);
$('#something').append(sel);
var nextLevel = function(text, idx) {
var parents = $({});
$('#something select').each(function() {
if($(this).index() > idx){
$(this).remove();
}
});
$('#something').find('li a').each(function() {
if ($(this).text() == text) {
parents = parents.add($(this).parent());
}
});
renderNextLevel(parents);
};
sel.change(function() {
nextLevel(sel.find('option:selected').text(), sel.index());
});
}
$(this).children('li').each(function() {
var opt = $('<option />');
var link = $(this).children('a');
var optVal = link.attr("href");
var optText = link.text();
if (sel.find('option[name="' + optText + '"]').length == 0) {
sel.append(opt);
opt.attr('value', optVal);
opt.attr('name', optText);
opt.text(optText);
}
});
});
}