2012-04-06 11 views
0

gegebenen unterstützt würde ich eine Funktion auf die Wirkung machen mag:Wie testen, ob aktuelle Browser ein tagName

function supportsElem(tagName) { 
    // returns boolean 
} 

wo:

supportsElem("div") // true 
supportsElem("randomtext") // false 

Was ist der einfachste Weg, das zu tun?

+2

Die meisten Browser, sogar IE6, die bereit sind, mit konfektionierten Tags zu beschäftigen. Was ist der größere Zweck hier? Versuchen Sie, Ihre eigene HTML5-Shim oder so etwas zu machen? – Pointy

+0

@Pointy Ich muss in der Lage sein, eine Saite wie 'div! zufriedengestellt vs. zufrieden! checked, wobei der erste Teil des Strings ein tagName sein könnte. Der Rest der Teile sind attr Namen. (Ich weiß, ich könnte Regex für alle Tag-Namen verwenden, aber da 108 von ihnen, also war ich auf der Suche nach einem schnelleren Weg) – ryanve

Antwort

1

Nur eine Vermutung, denn ich musste mich nie darum kümmern. Aber es scheint mir, Sie könnten das Element erstellen und dann überprüfen, ob es sich so verhält, wie es sollte. Zum Beispiel, dass es bestimmte Eigenschaften hat oder dass sein Konstruktor richtig ist (oder zumindest nicht dasselbe ist wie ein generisches, nicht unterstütztes Element).

Ein Beispiel für den Konstruktor Prüfung (ungetestet):

// pick a name that'll never be an element 
var generic_element = document.createElement('randomtext'); 

var tagName_to_check = document.createElement('div'); 
if (tagName_to_check.constructor === generic_element.constructor) { 
    // the browser treats the node as a generic element, rather than 
    // (eg) a DivElement 
    // so it's probably unsupported 
} 
+0

Diese Methode funktioniert definitiv (sogar in IE8). Siehe: http://jsfiddle.net/t9T5A/5/ Nizza! – ryanve

0

Sie könnten einfach das Element erstellen und dann mit einer für dieses Element spezifischen Methode testen.

+0

Richtig, aber ich weiß nicht, was das Tag ist. Gibt es eine Methode, die für alle bekannten Elemente spezifisch ist, aber nicht für die zusammengesetzten? – ryanve

1

Try this:

function testTag(tagname) { 
    return document.createElement(tagname) instanceof HTMLUnknownElement; 
} 

Ich weiß nicht, welche Art von Browser unterstützen diese (HTMLUnknownElement), obwohl haben.

+0

Gute Idee. Das scheint in standardkonformen Browsern zu funktionieren. Es funktioniert jedoch nicht in IE8. Testen Sie hier: http://jsfiddle.net/p68AP/1/ – ryanve

+0

In IE8 ist das Äquivalent "HTMLGenericElement" Versuchen Sie: http://jsfiddle.net/MX4Vp/2/ in IE – ryanve

1

Dies ist mehr Mühe als es wert ist.

Behalten Sie einfach ein Wörterbuch mit allen gültigen Tags bei (easy to find online). Im Grunde ein Array von Strings

dann seine nur

var dictionary = ["div", "a", "input", "span", ..., "td"]; 
var myTag = "div"; 
dictionary.indexOf(myTag); // if this doesn't return -1, then the tag is valid 
+0

Richtig, aber das nimmt nur Unterstützung, die war eigentlich meine ursprüngliche Idee, außer dass ich denke, ein Regex wäre schneller als das Array. FYI die zuverlässigste Liste von Elems ist unter http://dev.w3.org/html5/markup/elements.html oder http://dev.w3.org/html5/spec-author-view/index.html und du solltest wahrscheinlich auch http://w3fools.com/ lesen;) – ryanve

+0

Nimmt Unterstützung von was an? indexOf ist schneller als ein regec. Auch ich weiß w3schools ist Quatsch, es war nur das erste Suchergebnis. – Griffin

+0

Ich meinte testen, ob der Browser das Element tatsächlich erkennt, im Gegensatz zu testen, ob der Browser das Element erkennen soll. – ryanve

Verwandte Themen