#jquery #asp.net-core-mvc
Вопрос:
Я пытаюсь скрыть элементы li с определенным идентификатором в ul. Это мой jQuery, но он неправильный, и я не знаю, как правильно выполнить итерацию $.each
, чтобы получить правильные значения.
<script>
$(@idList).each(function (i,val) {
var linkId = val[i];
$("li").each(function () {
if ($(this).attr("id") != linkId )
$(this).hide();
});
});
Если я просто использую $("li").each(function () { if ($(this).attr("id") != 1) $(this).hide();
Он скроет все li, кроме одного с идентификатором=1. Но я хочу скрыть несколько ли в соответствии с тем, какие идентификаторы есть в списке @idList;
Заранее спасибо за любую помощь.
Комментарии:
1. Код кажется гораздо более сложным, чем это должно быть. Если
@idList
это просто строка селектора с несколькими значениями идентификаторов, например.#foo, #bar
тогда вы можете просто вызватьhide()
непосредственно этот объект:$('@idList').hide()
— обратите внимание на'
перенос вывода из кода C# на стороне сервера.2. @RoryMcCrossan Я думаю, что он хочет скрыть все, кроме тех, что в этом списке.
3.
val[i]
в этом нет особого смысла.i
является индексом$(@idList)
элементов,val
является конкретным элементом. Почему вы тогда используетеi
в качестве индекса intoval
?4. @Barmar Я работал над этим утверждением: «Я пытаюсь скрыть элементы li с определенным идентификатором в ul», но в вопросе не хватает полезных деталей, так что вы вполне можете быть правы. Если оператору действительно нужна такая логика, то используйте
:not()
:$('li:not("@idList")').hide();
5. Во-первых, когда вы спрашиваете о javascript/jquery, убедитесь, что предоставленный вами код является отображаемым html/js, в противном случае нам придется угадать, если
@idList
="id1,id2"
или"#id1,#id2"
или даже"'#id1'"
(что кажется странным, но возможно), поэтому вам не нужен код'
на стороне сервера. Если это действительноlist
(как определено в названии… (всегда используйте правильное имя переменной)) тогда, может быть, вам нужно преобразовать в строку?
Ответ №1:
Вы можете использовать цикл for для проверки списка и скрыть связанные <li>
, вы можете проверить более подробную информацию в моей демо-версии:
<style>
html {
visibility: hidden;
}
</style>
<div>
<ul>
<li id="1"><h3>First line</h3></li>
<li id="2"><h3>Second line</h3></li>
<li id="3"><h3>Third line</h3></li>
<li id="4"><h3>Fourth line</h3></li>
</ul>
</div>
@section Scripts
{
<script>
$(document).ready(function () {
document.getElementsByTagName("html")[0].style.visibility = "visible"; //ensure jquery is executed before showing the view
var idList = new Array(); // this part is to get the List
var i;
idList = ["1", "3"];
$("li").each(function () {
for (i = 0; i < idList.length; i ) {
$("#" idList[i]).hide(); //hide the related id
}
});
});
</script>
}
Тогда будет отображаться только id=2 или 4