Выбрать div на основе его дочернего селектора?

#jquery

#jquery

Вопрос:

первый раз за долгое время. Попытка выбрать определенные элементы в ленте на основе этого селектора, которые содержат некоторые из их дочерних элементов. Рассматриваемый дочерний div (скрытый в divs внутри divs) выглядит следующим образом:

 <div data-test-id="example-test-id">
...
</div>
  

Их родительские div выглядят следующим образом:

 <div data-grid-item="true">
...
</div>
  

Я хочу выбрать любой div, чей data-grid-item="true" , который также содержит дочерний div, чей data-test-id="example-test-id" .

В результате получается код, который выглядит следующим образом:

 {$("div[data-grid-item='true']:has(data-test-id="example-test-id"])").css( "background-color", "red" )}
  

В этом случае я просто пытаюсь придать родительскому div красный фон, чтобы я мог убедиться, что я выбрал правильные элементы, которые, похоже, не работают. Как я уверен, вы можете сказать, я новичок в jquery, поэтому приведенный выше код — это то, что я смог почерпнуть из большого количества поисковых запросов. Любая помощь была бы высоко оценена.
Спасибо!

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

1. ваш jquery выглядит правильно, за исключением кавычек. У вас есть двойные кавычки вокруг селектора и внутри него. Заключите его в одинарные кавычки example-test-id .

Ответ №1:

Это просто опечатка, вы были так близки :

 $("div[data-grid-item='true']:has(data-test-id="example-test-id"])")
__________________________________^ Missing '['
  

Примечание: Двойные кавычки также являются частью проблемы, которую вам нужно заменить затем одиночными, такими как :

 $("div[data-grid-item='true']:has([data-test-id='example-test-id'])")
________________________________________________^_______________^
  

 $("div[data-grid-item='true']:has([data-test-id='example-test-id'])").css("background-color", "red");  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-grid-item="true">
  <div data-test-id="example-test-id">TEST 1</div>
</div>
<div data-grid-item="true">
  <div>TEST 2</div>
</div>
<div data-grid-item="true">
  <div data-test-id="example-test-id">TEST 3</div>
</div>  

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

1. Если это просто опечатка, не следует ли закрыть это из-за опечатки?

2. Продолжайте и отметьте это, это не значит, что не отображается правильный ответ.

3. О, я больше касался темы вопроса об опечатке, который следует закрыть и на который нет ответа, да, ваш ответ, скорее всего, правильный