2014-02-26 5 views
7

Ich bekomme die Kindknoten von en Element und ich möchte überprüfen, ob die Tags tatsächlich Text enthalten können. Zum Beispiel:Überprüfen Sie, ob ein Element mit einem eigenständigen Tag mit JavaScript geschlossen wird

<br />, <img /> 

Sollte false zurück und

<span></span>, <div></div>, <li></li> 

sollte true zurückgeben. Vielen Dank!

+2

Was ist ''

+0

Jedes Element, das Text in irgendeiner Form enthalten kann, also auch

+0

Sie könnten überprüfen, ob 'el.childNodes.length> 0 ', aber im Allgemeinen gibt es keinen Unterschied zwischen einem leeren und einem selbstschließenden Element im DOM – Bergi

Antwort

8

Leider gibt es keine Möglichkeit zu erkennen, wie ein Tag in dem Code geschrieben wurde, da, wenn das JavaScript ausgeführt wird, der HTML-Code wurde bereits in DOM-Objekte geparst.

Ihre Frage scheint jedoch mehr darüber zu sein, ob ein bestimmter Elementtyp Text enthalten kann. Dieser einfache Test gibt Ihnen eine Antwort pro Elementtyp:

function canElementContainText(tagname) { 
    try { 
     var e = document.createElement(tagname); 
     return e.outerHTML.indexOf("/") != -1; 
    } catch (ex) { 
     return false; 
    } 
} 

Zum Beispiel canElementContainText("div") kehrt true und canElementContainText("img") kehrt false.

Sie können dann die tagName Eigenschaft eines Elements an diese Funktion übergeben, um es zu testen.

var result = canElementContainText(myElement.tagName); 
+0

Perfekt, das wird funktionieren. Vielen Dank! – Ood

+0

Ziemlich willkommen! :) – wizulus

+0

Dieses Skript funktioniert nicht auf Firefox! – tnanoba

3

Skript Nach funktioniert gut (Cross-Browser-Problem behoben):

function containTxt(tag) { 
    var tags = /^(img|video)$/i; // any values which will be in `tags` set will be treated as they can't have a text value 
    return !tags.test(tag); 
} 

console.log(containTxt("img")); // returns false 
console.log(containTxt("div")); // returns true 
+0

Dies ist gut zu prüfen, ob ein Tag tatsächlich * Text * enthält, aber nicht wenn es * Text enthalten kann. Danke trotzdem! – Ood

+0

@Ood Siehe Update und gern geschehen! – tnanoba

-4

konnte RegEx verwenden:

// these are samples, get elements text using element.innerHTML; 
var one = "<a href='something'>Links</a>"; 
var two = "Lorem ipsum dolor"; 

function check(str){ 
    return str.match(/<[a-zA-Z]+.*>(.|\n)*<\/[a-zA-Z]+>/) ? true : false; 
} 

console.log(check(one)); // true 
console.log(check(two)); // false 
+0

Sie überprüfen, ob ein Tag tatsächlich HTML enthält . Das ist nicht das, was die OP verlangt hat – collapsar