2016-05-12 27 views
0

Ich möchte die .red-border-Klasse zu einem div hinzufügen und alle <td> s in der nächsten <tr>.jQuery wählen Sie alle Kinder der nächsten

Aber mit .closes() bekomme ich nur die Elemente unmittelbaren Elternteil <td>.

Gibt es eine Möglichkeit, dass ich alle Kinder der nächsten <tr> zielen kann?

Mein Code ist unten.

Mein aktueller fehlerhafte JS:

$('#myelement').closest('.container, tr td').addClass('red-border'); 

Offensichtlich ist dies nur Ziele 1 td. Ich möchte sie alle umfassen.

Mein HTML:

<div id="container"> 
<span class="myelement">element</span> 
</div> 

<table> 
    <tr> 
    <td></td> 
    <td><span class="myelement">element</span></td> 
    <td></td> 
    </tr> 
</table> 

Edit: normalerweise könnte ich die .find() Funktion verwenden, aber dies würde nicht mit dem or Betreiber arbeiten.

+0

in der Nähe 'tr' zu' myelement' ist das erste 'tr', also warum Verwenden Sie nicht 'tr: first' oder' $ ("# myelement"). parent(). Geschwister ("table"). find ("tr"). eq (0) '? – Bhumika107

+0

Ich kann die "tr" gut zielen, aber ich möchte diese 'tr's Kind' td's zielen. Auch würde nur das "tr" brechen mein oder Operator brechen. – MeltingDog

+0

können Sie Beispiel des Codes nach Änderung zeigen? –

Antwort

2

Ich hoffe, das ist, was Sie erwarten. Sie müssen durch jede tr und fügen red-border Klasse zu seinem ersten td mit td:first Selektor wie unten

$(document).ready(function() { 
 
    $('#container').addClass('red-border'); 
 
    $('tr').each(function(){ 
 
    $(this).find('td:first').addClass('red-border'); 
 
    }) 
 
})
.red-border{ 
 
    border:red 2px solid; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    <span class="myelement">element</span> 
 
</div> 
 

 
<table> 
 
    <tr> 
 
    <td>First row First TD</td> 
 
    <td><span class="myelement">element</span> 
 
    </td> 
 
    <td></td> 
 
    </tr> 
 
    <tr> 
 
    <td>Second row First TD</td> 
 
    <td><span class="myelement">element</span> 
 
    </td> 
 
    <td></td> 
 
    </tr> 
 
</table>

+1

ich denke, was er meint, ist alles td der nächsten tr zu container so können wir, dass es der erste tr der nächsten tabelle ist. – guradio

+0

@guradio Ich glaube nicht, dass er das meinte. Er sagte _Ich möchte die .red-border-Klasse zu einem #container-div hinzufügen und alle s in der nächsten ._ dh zum #container und alle 'td's, die am nächsten zu ihrem' tr' sind, was zuerst 'td bedeutet 'von jedem' tr'. –

+0

'alle s in der nächsten ' wenn ich verstehe, diese nächste TR ist zuerst tr der nächsten Tabelle dann alle td in diesem tr nur mein Verständnis. OP sollte es klären, wenn es Verwirrung verursacht :) – guradio

1

Warum möchten Sie es in einer einzigen Zeile? teilen Sie es einfach auf zwei, es wird einfacher sein.

$('.myelement').closest('#container').addClass('red-border'); 
$('.myelement').closest('tr').find('td').addClass('red-border'); 

durch die Art und Weise, genannt Sie #myelement wenn Ihr Tag myelement eine Klasse hatte. Es sollte mit .myelement aufgerufen werden. Und der Container ist eine ID so #container

+0

Vielen Dank für die Tippfehler! Um Ihre Frage zu beantworten, ist es, weil ich dort einen 'oder' Operator brauche. – MeltingDog

1

Nach Ihrer Struktur zu durchlaufen Sie hierfür gehen:

$(".myelement").parents("#container").addClass('red-border').siblings("table").find("tr").eq(0).children().addClass('red-border'); 

ziele auf die Eltern #container mit parents(). Dies wird nichts für die span innerhalb td geben. Dann zielen Sie auf seine Geschwister table und die erste tr mit eq(0).

1

Anruf Klasse Element mit .myelement statt #myelement

$('.myelement').closest('.container, tr td').css({"color": "red", "border": "2px solid red"}); 

oder

$('.myelement').closest('.container, tr td').addClass('red-border'); 
Verwandte Themen