Я не могу найти конкретный пост по этой проблеме.
По сути, я пытаюсь скрыть текст 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>
3 ответа
Вместо использования оператора return
, который остановит выполнение оставшихся строк кода в функции обратного вызова, используйте оператор сравнения, например if
.
Во-вторых, только выбирайте дочерние элементы текущего элемента в контексте, используя метод 'children' или 'find' из jQuery.
Нет необходимости использовать! Важное в CSS.
Надеюсь, это решит проблему.
$("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>
Было две проблемы:
- После оператора return выполнение кода не выполняется.
- Также вам нужно поймать текущий тег, чтобы скрыть.
Посмотрите, я сделал демо ниже
$("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>
В вашей функции вы возвращаете результат сравнения, который выходит из функции и пропускает последнюю часть вашего кода. Вместо этого вы хотите использовать простой 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>
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.