1

htmlタグが存在するかどうかを確認するためのネイティブJavascript関数はありますか?

つまり :

 var tag = "div";
 alert(isValidTag(tag)) // true;
 alert(isValidTag("foo")) // false;

そのためのネイティブ関数がない場合、私は自分の関数を保持します:

function isValidTag(tagName) {
  var tags = ["div","span","a","link" ... "body"];
  for(var i=0, len = tags.length; i++ < len; ) {
    if(tags[i] == tagName) return true;
  }
  return false;
}
4

4 に答える 4

6

いいえ。JSにはHTML固有のものはまったくなく、DOMはそのようなものを追加しません。

于 2012-07-25T12:32:38.360 に答える
4

これはどう:

tags = 'a b body...'.split(' ');
function isTag(tag) {
  return tags.indexOf(tag.trim().toLowerCase()) > -1;
}
于 2012-07-25T12:39:38.637 に答える
3
var tags = {a: true, b: true, /*...,*/ body: true};

function isTag(_tag)
{
  return tags[_tag];
}

この単純化を提案してくれてありがとう、@ rsp

于 2012-07-25T12:35:40.433 に答える
3

これはそれほど効率的ではないかもしれません、私はそれについてタイムトライアルをしていませんが、それでもすべての可能な値のリストを自分で維持しなければならない代わりに良い代替手段になる可能性があります。

var isHTML = (function() {
  var unknown = '[object HTMLUnknownElement]', overrides = {CANVAS:1,VIDEO:1}; //html5 elements. Some browsers don't support these.
  return function(tag) {
    return overrides[tag = tag.toUpperCase()] || (!overrides.hasOwnProperty(tag) && (overrides[tag] = (document.createElement(tag).toString() !== unknown)));
  };
})();

このメソッドは、最初にキャッシュされた結果をチェックし、結果がない場合は、ブラウザ自体に基づいて結果を決定しdocument.createElementます。ブラウザがサポートしていない場合は、htmlタグではないと安全に推測できます。

いくつかのサンプル出力:

isHTML('curve'); //false
isHTML('div'); //true
isHTML('DIV'); //true
isHTML('tbody'); //true
isHTML('object'); //true
isHTML('document'); //false
isHTML('html'); //true
isHTML('svg'); //false
isHTML('rect'); //false
于 2016-01-06T09:22:46.020 に答える