2012-04-04 4 views
2

Nur wundernd, was ich tun kann, um zu überprüfen, ob etwas nach einem div existiert. In diesem Beispiel in diesen Fällen sollte Wahr zurück:checken, ob etwas nach div existiert

http://jsfiddle.net/BsqTg/1/

http://jsfiddle.net/BsqTg/2/

In diesem Fall Falsch zurückkehren sollte:

http://jsfiddle.net/BsqTg/3/

Ich versuche $ zu verwenden ('#text'). next(). Länge, aber nicht funktioniert.Spezial für das 1. Beispiel.

+0

Meinst du das nächste Div mit oder wenn es etwas in einem div gibt? – sbhomra

Antwort

2

nicht sicher, ob einen kürzeren Weg besteht jedoch:

var text = $("#text"), 
    hasNext = !!(text.next().length || (text[0].nextSibling && $.trim(text[0].nextSibling.nodeValue))); 

Grundsätzlich prüfen wir in erster Platz, wenn es einen Element Knoten mit next() (so, <br/> oder andere Elemente) gibt, wenn es gibt, dann ist es genug. Andernfalls prüfen wir, ob es ein Objekt nextSibling gibt, und wenn es einen Wert hat, der keine leere Zeichenfolge ist (also alle Leerzeichen werden nicht berücksichtigt).

+0

Danke für mich arbeiten, und vor jeder Lösung? –

+0

Ich habe es nicht versucht, aber ich glaube, Sie können 'next()' mit 'prev()' und 'nextSibling' in' previousSibling' ersetzen. – ZER0

0

Dies ist, weil jquery keine bequeme Möglichkeit bietet, Textknoten zu erhalten. Sie können container .contents() verwenden, das Textknoten zurückgibt, und dann durchlaufen, um zu sehen, was es nach dem fraglichen div gibt. Um zu sehen, ob ein Knoten ein Textknoten ist es nodeType == 3.

1

Ja, können Sie DOM verwenden für diese

alert($('div#text').is(':not(:last)') || $.trim($('div#text')[0].nextSibling.nodeValue).length > 0); 

Gibt false zurück, auf dem 3. Fall:

http://jsfiddle.net/BsqTg/8/

+0

Funktioniert nicht, wenn ein White-Space-Knoten gefolgt von einem Tag vorhanden ist –

+0

@SalmanA Danke, dass Sie darauf hingewiesen haben. bearbeitet –

1

Werfen Sie einen Blick auf this demo. Ich habe alle drei Fälle in einem zusammengefasst. Der Code ist wie folgt:

var $contents = $(this).contents().filter(function() { 
    // modify the following line to indicate what recon as "something" 
    return (this.nodeType == 1 || this.nodeType == 3) && /\S/.test(this.nodeValue); 
}); 
var $text = $(this).find(".text:first"); 
if (console && console.log) { 
    console.log($contents, $contents.index($text), $contents.length); 
} 
if ($contents.index($text) == $contents.length - 1) { 
    $(this).css({ 
     background: "#F99" 
    }); 
} 
else { 
    $(this).css({ 
     background: "#9F9" 
    }); 
} 

Dieser Code führt Folgendes aus:

  1. gewinnen alle Knoten einschließlich Text und Kommentar Knoten und prüft, ob sie etwas
  2. sind es zählt diese Knoten
  3. findet den Index eines bestimmten Elements innerhalb dieser Liste überprüft, ob es der letzte ist