我找不到有关此问题的具体帖子。
基本上,我要实现的是如果Compare
小于data-product-id
则隐藏someValue
文本
经过一番搜索,这就是我的想法。没有错误,但是代码不会执行任何操作。我确定我的代码是错误的。
有人可以向我解释我的代码有什么问题吗,如果你们包括/解释正确的方法会很有帮助。
$("a[data-product-id]").filter(function() {
return parseInt($(this).attr("data-product-id")) < 99335;
$('.show').addClass('hide');
});
.hide {
display: none !important
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="button" data-product-id="99336" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99335" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99334" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99333" rel="nofollow"><p class="show">Compare</p></a>
答案 0 :(得分:5)
存在三个问题:
return
,并且return
语句之后将不会执行任何代码(这意味着$('.show').addClass('hide')
将永远不会被调用)。 / li>
data-product-id
值进行条件检查;您只是将其归还。将此行换成if
有条件的,而不是使用return
。$('.show').addClass('hide')
。如果任何个父母满足条件,这将隐藏.show
个元素的所有。若要更正此问题,您应将 .find()
与$(this).find('.show')
结合使用。这是一个可行的示例:
$("a[data-product-id]").filter(function() {
if (parseInt($(this).attr("data-product-id")) < 99335) {
$(this).find('.show').addClass('hide');
}
});
.hide {
display: none !important
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="button" data-product-id="99336" rel="nofollow">
<p class="show">Compare</p>
</a>
<a href="#" class="button" data-product-id="99335" rel="nofollow">
<p class="show">Compare</p>
</a>
<a href="#" class="button" data-product-id="99334" rel="nofollow">
<p class="show">Compare</p>
</a>
<a href="#" class="button" data-product-id="99333" rel="nofollow">
<p class="show">Compare</p>
</a>
答案 1 :(得分:1)
在函数中,您将返回比较结果,这将退出函数并跳过代码的最后一部分。相反,您只想使用简单的if
来仅在data-product-id
小于99335
时继续执行。
此外,如果使用$('.show')
,则将始终选择类为show
的所有元素。为了防止这种情况,请使用jQuery的find()
将选择器限制为仅子元素。
$("a[data-product-id]").filter(function() {
if (parseInt($(this).attr("data-product-id")) < 99335)
$(this).find('.show').addClass('hide');
});
.hide {
display: none !important
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="button" data-product-id="99336" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99335" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99334" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99333" rel="nofollow"><p class="show">Compare</p></a>
答案 2 :(得分:1)
有两个问题:
看看,我在下面做了一个演示
$("a[data-product-id]").filter(function() {
if( parseInt($(this).attr("data-product-id")) < 99335){
$(this).removeClass('show').addClass('hide');}
});
.hide {
display: none !important
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="button" data-product-id="99336" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99335" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99334" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99333" rel="nofollow"><p class="show">Compare</p></a>
答案 3 :(得分:1)
使用return
之类的比较运算符代替使用if
语句,该语句将停止执行回调函数中剩余的代码行。
第二,仅使用jQuery的“子项”或“查找”方法在上下文中选择当前元素的子项。
不需要在CSS中使用!important。
希望能解决这个问题。
$("a[data-product-id]").filter(function() {
if(parseInt($(this).attr("data-product-id")) < 99335){
$(this).children('.show').addClass('hide');
}
});
.hide {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="button" data-product-id="99336" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99335" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99334" rel="nofollow"><p class="show">Compare</p></a>
<a href="#" class="button" data-product-id="99333" rel="nofollow"><p class="show">Compare</p></a>