Избирательность в jQuery — выбор определенного div и изображения

#jquery #jquery-selectors

#jquery #jquery-селекторы

Вопрос:

Ищу помощи ниндзя jQuery. Мой приведенный ниже jQuery работает, но у меня есть сильное подозрение, что то, как я выбрал эти элементы, может быть значительно улучшено. Как лучше всего выбрать эти элементы? Можно ли улучшить мой код? (Смотрите цель ниже, важно отметить, что я хочу выбрать только первые результаты класса div и изображение внутри)

 <div id="priceInventory">
<div class="Hdr">Some Unique Header</div>

<div class="results"> 
    <div onclick="showInfo('#RandomId');" class="xx yy"><img class="arrow" src="/images/arrow-up.png"> Title</div> 
        <div style="display: none;" id="RandomId">Unique Content</div>                                                                                                          
</div>

<div class="results"> 
    <div onclick="showInfo('#RandomId');" class="xx yy"><img class="arrow" src="/images/arrow-up.png"> Title</div> 
        <div style="display: none;" id="RandomId">Unique Content</div>                                                                                                          
</div>

<div class="results"> 
    <div onclick="showInfo('#RandomId');" class="xx yy"><img class="arrow" src="/images/arrow-up.png"> Title</div> 
        <div style="display: none;" id="RandomId">Unique Content</div>                                                                                                          
</div>
<!-- results repeats -->    
  

 <script>
$("body div#priceInventory div:nth-child(2) div:nth-child(2)").show();
$("body div#priceInventory div:nth-child(2) div:nth-child(1) img").attr('src','/images/arrow-dwn.png');
</script>
  

Общая цель кода — отображать содержимое только первого набора содержимого при загрузке страницы. Стрелка также обновляется, чтобы указать, что отображается это содержимое.

Большое спасибо, я искренне люблю вас, друзья из stackoverflow. Я надеюсь, что другие тоже найдут это полезным.

Комментарии:

1. С помощью jQuery вы также должны избавиться от всего встроенного JavaScript.

2. $('.arrow').click(function (){ showInfo('#RandomId'); });

Ответ №1:

С виду это должно быть немного более элегантно. Просто уменьшение выбора, но я думаю, что это то, что вы ищете. Это будет делать то же самое, что вы делаете выше, если только у вас нет других элементов за пределами этого наследника achy, которые используют классы .results и .arrow .

 $(".results:first div:hidden").show();
$(".results:first .arrow").attr('src','/images/arrow-dwn.png');
  

Комментарии:

1. Спасибо, Дастин! Есть ли способ заставить его применяться только к первому div с результатами класса и только к изображению внутри него? Ваш код работает отлично, но применим ко всем.

Ответ №2:

Я лично предпочел бы:

 <script>
$("#priceInventory .results div div.someclass").show();
$("#priceInventory .results div img.arrow").attr('src','/images/arrow-dwn.png');
</script>
  

Someclass — это класс, который вы добавляете во второй вложенный div. Лично мне не нравится использовать nth-child, потому что он ломается, когда я меняю порядок / макет.