2016-07-04 3 views
1

Я не могу узнать, как именно работает родительский селектор в jQuery.jQuery - родительские селекторы

var test = $("p:contains('Lorem ipsum dolor sit amet')").parentsUntil("span"); 
 
    
 
    
 
    test.css({ "border" : "1px solid red"});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    \t \t \t <p>Title</p> 
 
    \t \t \t <span> 
 
    \t \t \t \t <p>Span</p> 
 
    \t \t \t \t <div> 
 
    \t \t \t \t \t <p>Div</p> 
 
    \t \t \t \t \t <p>Lorem ipsum dolor sit amet</p> 
 
    \t \t \t \t </div> 
 
    \t \t \t </span> 
 
    \t \t \t <tr> 
 
    \t \t \t \t <th>Xx</th> 
 
    \t \t \t \t <td>YY</td> 
 
    \t \t \t </tr> 
 
    \t \t </table>

Как получить рамку вокруг пролете? Мой код не работает.

+0

Ваш вопрос unclead. Я не понимаю, чего ты хочешь. Также ваш html недействителен. – Mohammad

+0

Ваш HTML недопустим. Браузер обрабатывает это различными способами, и вы должны исправить это, прежде чем работать над своим jQuery. – j08691

+0

Используйте '.closest (" span ")' вместо 'parentsUntil (" span ")'. –

ответ

0

Вам просто нужно использовать .closest() вместо того, чтобы, наряду с .parent():

var test = $("p:contains('Lorem ipsum dolor sit amet')").parent().closest("span"); 

UPDATE

Вы также можете продолжать использовать parentsUntil(), но добавить родителя() по понятным причинам:

var test = $("p:contains('Lorem ipsum dolor sit amet')").parentsUntil("span").parent(); 

Но это не будет работать, если прямой родитель типа «пролет», потому что parentsUntil исключает текущий элемент.

+0

Почему, если я изменю .closest («span») на .closest («table»), он снова не работает? –

+0

@ Каролина Тича, потому что ваша таблица недействительна (или, по крайней мере, она недействительна согласно Chrome 51.0.2704.103). Абзац и интервал должны быть обернуты тегами и . В противном случае они автоматически вынимаются из таблицы, и это похоже на то, что после них тег

. –

0

Согласно документации .parentsUntil() отберет все родитель между текущим элементом и родительским селектором (исключая его)

  • селектора Тип: Селектор Строки, содержащее выражение выбора, чтобы указать, где в остановить сопоставление элементов предка.

  • Тип: Селектор Строка, содержащая выражение селектора для соответствия элементам против.

Что вам нужно, это просто .parents('span')

var test = $("p:contains('Lorem ipsum dolor sit amet')").parents("span"); 
 
    
 
    
 
    test.css({ "border" : "1px solid red", "display":"block"});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    \t \t \t <p>Title</p> 
 
    \t \t \t <span> 
 
    \t \t \t \t <p>Span</p> 
 
    \t \t \t \t <div> 
 
    \t \t \t \t \t <p>Div</p> 
 
    \t \t \t \t \t <p>Lorem ipsum dolor sit amet</p> 
 
    \t \t \t \t </div> 
 
    \t \t \t </span> 
 
    \t \t \t <tr> 
 
    \t \t \t \t <th>Xx</th> 
 
    \t \t \t \t <td>YY</td> 
 
    \t \t \t </tr> 
 
    \t \t </table>

Смежные вопросы