2012-04-09 8 views
0

Ich habe die folgende HTML, wo ich die jquery nach Methode() verwenden, um in einigen neuen HTML-Sticks. Das funktioniert gut, aber ich habe jetzt eine Situation, in der ich nicht möchte, dass es die after() -Methode unter bestimmten Bedingungen anwendet (wo eine zusätzliche Klasse in einem Top-TD existiert) und ich versuche, die korrekte jQuery-Selektor-Syntax herauszufinden.Was ist der beste JQuery-Selektor für diese Änderung?

Um dieses zu konkretisieren, zu beginnen, ich habe folgendes html:

<td class="fc-widget-content"> 
<div> 
     <div class="fc-day-number">1</div> 
     <div class="fc-day-content"> 
    </div> 
    </td> 

und ich möchte die folgende Logik: Ich möchte diesen HTML-Stick:

 <span class="addEventHidden" style="display: none;"> 
      <img src="/Content/Images/addEvent.gif"> 
     </span> 

direkt nach dem fc-day-nummer div. Ich kann dies leicht tun dies, indem Sie:

$('.fc-day-number').after(function() { 
    return "<span class='addEventHidden' style='display: none;'><img src='/Content/Images/addEvent.gif'></span>"; 
}); 

funktioniert dies sehr gut, außer in einigen Fällen möchte ich nicht die .after() -Methode ausgeführt werden, wenn die obere div diese Extraklasse hat: fc-andere- Monate

so dass diese nach dem Befehl anzuwenden, wenn die oben wie folgt aussieht:

<td class="fc-widget-content"> 

aber nicht, wenn der Top-TD wie folgt aussieht:

<td class="fc-widget-content fc-other-month"> 

Antwort

2

Versuchen:

$('td.fc-widget-content:not(.fc-other-month) div.fc-day-number') 
    .after('<span class="addEventHidden" ... >'); 

Beispiel hat Zeilenumbruch für Klarheit. Ersetzen Sie <span class="addEventHidden" ... > durch legit html.

0
$('.fc-widget-content .fc-day-number').not('.fc-other-month .fc-day-number').after(function() { 
    return "<span class='addEventHidden' style='display: none;'><img src='/Content/Imags/addEvent.gif'></span>"; 
}); 
+0

'fc-other-month' ist die Klasse der Eltern. –

+0

fc-other-month wird keine Klasse auf dem gleichen Niveau wie die fc-day-Nummer sein, es ist eine Klasse des TD darüber. . Ich nehme an, dass einige Syntax dies berücksichtigen muss – leora

-2
$(".fc-widget-content:not(.fc-other-month):parent(.fc-day-number) .fc-day-number"); 
+0

Dies wird das Ziel "td", nicht das "div". –

+0

[': parent'] (http://api.jquery.com/parent-selector/) funktioniert nicht so. Ich denke, du meinst ': eltern 'oder': hat (.fc-tag-nummer) '. In beiden Fällen werden diese nicht benötigt, Sie können einfach '' .fc-widget-content: nicht (.fc-other-month) .fc-day-number'. –

-2

können Sie .filter nur verwenden, um divs s mit den richtig Eltern zu bekommen:

$('.fc-day-number').filter(function(){ 
    return $(this).closest('.fc-other-month').length === 0; 
}).after(function() { 
    return "<span class='addEventHidden' style='display: none;'><img src='/Content/Images/addEvent.gif'></span>"; 
}); 

Oder Sie können einen spezifischeren Selektor verwenden, um die div auszuwählen.

$('.fc-widget-content:not(.fc-other-month) .fc-day-number').after(function() { 
    return "<span class='addEventHidden' style='display: none;'><img src='/Content/Images/addEvent.gif'></span>"; 
}); 

P.S. Sie haben eine </div> vor Ihrer </td> vergessen.

+0

Ich habe nicht gewählt, aber ich habe nach dem " korrekte Eltern "scheint wie eine peinliche Art und Weise zu tun. Ihre zweite Lösung hat Doppel-oder einfache Anführungszeichen im Selektor nicht übereingestimmt. – Mathletics

+0

@Mathletics: Die erste war nur ein Vorschlag, sagte nie, es war die beste Idee. Auch die Zitate behoben. :-P –

Verwandte Themen