jQuery вложил $.each() в в ASP.NET Основной MVC

#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 в качестве индекса into val ?

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

введите описание изображения здесь