这里的总js newb。
这是HTML
<a href="#" class="dur" id="8.5">Size 8.5</a>
<div class="product1">
<ul class="sizeAvail" style="display:none;">
<li>8</li>
<li>8.5</li>
<li>9</li>
<li>9.5</li>
<li>10</li>
</ul>
</div>
<div class="product2">
<ul class="sizeAvail" style="display:none;">
<li>8</li>
<li>8.5</li>
<li>9</li>
<li>9.5</li>
</ul>
</div>
这是我需要的'逻辑'......
这就是我到目前为止......任何帮助都将不胜感激。
<script type = "text/javascript" > $(document).ready(
$(".dur").click(function () {
var clickedSize = $(this).attr("id");
$(".sizeAvail").each(function (li,+) {
alert($(this).text());
});
});
</script>
答案 0 :(得分:1)
这是一个工作小提琴:
http://jsfiddle.net/Hive7/uZTYf/
这是我使用的jquery:
$(".dur").click(function () {
var clickedSize = this.id;
$(".sizeAvail li").each(function () {
if($(this).text() == clickedSize) {
$(this).parent().show();
} else {
$(this).hide();
}
});
});
你目前正在做的事情是不正确的,因为你没有循环遍历.sizeAvail的孩子,因为你没有直接陈述你所做的状态不像jquery的大部分方面都需要引用。< / p>
如果仍然无效,请确保您有一个jquery库
或者您可以使用纯js选项:
var $items = document.getElementsByClassName('sizeAvail');
var $dur = document.getElementsByClassName('dur');
for (i = 0; i < $dur.length; i++) {
$dur[i].addEventListener('click', durClick);
}
function durClick() {
var clickedSize = this.id;
for (i = 0; i < $items.length; i++) {
var $liElems = $items[i].getElementsByTagName('li');
for (i = 0; i < $liElems.length; i++) {
if ($liElems[i].innerHTML == clickedSize) {
$liElems[i].parentNode.style.display = 'block';
$liElems[i].style.display = 'block';
} else {
$liElems[i].style.display = 'none';
}
}
}
}
答案 1 :(得分:0)
你要做的每件事都是非常简单的语法。您可以找到有关在许多地方使用的方法的文档。你可以简单地使用javascript但我假设你想使用jQuery
在高级别上,您将希望使用jQuery选择器获取所有UL对象,然后使用所有LI子级的每个UL循环,例如:
$('ul').each(function() {
$(this).find('li').each(function(){
});
});
要获取您要查找的数据,您可以使用addClass(),attr()等jQuery方法。
答案 2 :(得分:0)
您可以使用not
,has
和contains
选择器的组合来获取匹配的元素,并使用addClass
在其上设置类。
价:
http://api.jquery.com/not-selector/
http://api.jquery.com/has-selector/
http://api.jquery.com/contains-selector/
http://api.jquery.com/addClass/
代码:
$(".dur").click(function () {
$(".sizeAvail:not(:has(li:contains('"+$(this).prop("id")+"')))").addClass('hide')
});
答案 3 :(得分:0)
您可以使用此功能。检查div的所有li时设置标志。如果没有li与id具有相同的值,则最后隐藏div。
$(document).ready(function(){
$(".dur").click(function () {
var clickedSize = this.id;
$(".sizeAvail").each(function(){
var hide = 1;
$(this).children('li').each(function(){
if(clickedSize == $(this).text()) hide=0;
});
if(hide){
$(this).closest('div').hide(); //Or $(this).parent().hide();
}
});
});
});
<强> JSFIDDLE 强>
答案 4 :(得分:0)
您也可以尝试这个
$('a.dur').on('click', function(e){
e.preventDefault();
var id = this.id;
$('ul.sizeAvail li').each(function(){
if($(this).text() == id) $(this).closest('ul').addClass('hide');
});
});
答案 5 :(得分:0)
演示: http://jsfiddle.net/QyKsb/
这是一种方法,就像你一样。但是,我不喜欢,个人喜欢用数据混乱html。但它在某些情况下可能是不错的选择,但我不喜欢它。
你也不能给id一个以数字开头的值。
var products= $("div[class^='product']"),
dur =$('.dur');
dur.click(change);
function change(){
var size= $(this).data('size');
products.each(function(){
var d = $(this);
d.find('.sizeAvail>li').each(function(){
d.hide();
if($(this).text()==size) { d.show(); return false;}
});
});
}