2016-07-04 16 views
1

Ich kann nicht herausfinden, wie genau Eltern Selektor in jQuery funktioniert. jQuery - Eltern Selektoren

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>

Wie Grenze um Spanne zu bekommen? Mein Code funktioniert nicht.

+0

Ihre Frage unclead ist. Ich kann nicht verstehen, was du willst. Auch Ihr HTML ist nicht gültig. – Mohammad

+0

Ihr HTML ist ungültig. Browser behandeln dies ist verschiedene Möglichkeiten und Sie sollten dies korrigieren, bevor Sie an Ihrem jQuery – j08691

+0

Verwenden Sie '.closes (" span ")' anstelle von 'elternUntil ("span") '. –

Antwort

0

Sie müssen nur verwenden .closest() statt, zusammen mit .parent():

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

UPDATE

Sie auch mit parentsUntil halten können(), aber hinzufügen parent() aus offensichtlichen Gründen:

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

Aber das wird nicht funktionieren, wenn die direkte Mutter vom Typ „span“, weil parentsUntil das aktuelle Element ausschließt.

+0

Warum, wenn ich .closes ("span") zu .closes ("table") ändere es funktioniert nicht? –

+0

@Karolina Ticha, weil Ihre Tabelle ungültig ist (oder zumindest laut Chrome 51.0.2704.103 nicht gültig ist). Der Absatz und der Bereich sollten in die Tags und eingepackt werden. Andernfalls werden sie automatisch aus der Tabelle entfernt und es ist, als ob das

-Tag hinter ihnen steht. –

0

Gemäß der Dokumentation .parentsUntil() alle Eltern zwischen dem aktuellen Element ausgewählt wird und der Auswahl Eltern (ohne es)

  • Selektor Typ: Wahl Ein String einen Selektor Ausdruck enthält, um anzuzeigen, wo auf stoppe übereinstimmende Vorfahrenelemente.

  • Filter Typ: Selektor Eine Zeichenfolge, die einen Selektorausdruck enthält, mit dem Elemente verglichen werden sollen.

Was Sie brauchen, ist nur .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>