21 Stimmen

Wie erhält man Elemente, die keine Kinder haben, aber möglicherweise Text enthalten?

Die leerer Selektor sagt das: Passt zu allen Elementen, die keine Kinder haben (einschließlich Textknoten).
Findet alle Elemente, die leer sind - sie haben keine untergeordneten Elemente oder Text.

Was ich will, ist Elemente zu erhalten, die keine Kinder hat, aber möglicherweise Text innerhalb. wie?

UPDATE:
Beispiel:
Ich möchte diese Elemente auswählen, die keine Kinder haben, aber Text haben können, mit einer Syntax wie diese:

$('div:empty, a:empty, span, p:empty, td:empty, img, input').mousemove(myMouseOverHandler);

32voto

Borgar Punkte 35923

Holt jedes Element, das kein anderes Element hat:

$('*:not(:has(*))');

19voto

Paolo Bergantino Punkte 465120

Wenn ein Element nur Text enthält, children() hat eine Länge von 0 :

<div id="test1">
Hello World
</div>

<div id="test2">
<b>Hey there</b>
</div>

<script>
alert($("#test1").children().length); // alerts 0
alert($("#test2").children().length); // alerts 1 (the bold tag)
</script>

EDIT : In Antwort auf Ihre bearbeiten, jQuery ist genial genug, um Sie benutzerdefinierte Filter zu tun:

$.expr[':'].emptyOrText = function(e) {  
    return $(e).children().length == 0;
};

Wenn Sie also die obigen Angaben mit dem HTML-Code vergleichen, könnten Sie Folgendes tun:

$('div:emptyOrText'); // will select #test1

6voto

Seth Holladay Punkte 7675

Für alle, die jQuery nicht verwenden wollen, habe ich eine reine JavaScript-Funktion erstellt.

const getElementsWithNoChildren = (target) => {
    let candidates;

    if (target && typeof target.querySelectorAll === 'function') {
        candidates = target.querySelectorAll('*');
    }
    else if (target && typeof target.length === 'number') {
        candidates = target;
    }
    else {
        candidates = document.querySelectorAll('*');
    }

    return Array.from(candidates).filter((elem) => {
        return elem.children.length === 0;
    });
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X