2015-11-07 2 views
4

У меня есть массив элементов:
var elements = ['div', 'a', 'p', 'foo']Как проверить, действителен ли элемент DOM и/или атрибут?

У меня также есть массив атрибутов:
var attributes = ['src', 'href', 'quux', 'id']

Я хочу, чтобы понять, как я могу проверить, если комбинации вышеперечисленного бы действительным Объект DOM.
Или, другими словами:
Как проверить объект DOM на схему DOM? *

Например (на основе указанных выше элементов и атрибутов):

DOM_result = '<div src />'; // = false 
DOM_result = '<div href />'; // = false 
DOM_result = '<div quux />'; // = false 
DOM_result = '<div id />'; // = true 
DOM_result = '<a src />'; // = false 
DOM_result = '<a href />'; // = true 
DOM_result = '<a quux />'; // = false 
DOM_result = '<a id />';  // = true 
etc... 

* = не уверен, если это называется DOM схемы.

PS:
В моем примере я использую JS, но, пожалуйста, рассмотрите этот вопрос на языке сценариев агностик.

ответ

4

Большинство атрибутов контента являются reflected атрибутом IDL (ака собственности) с тем же именем.

Эти атрибуты IDL реализованы как свойства доступа (то есть геттеры и сеттеры) в интерфейсе, из которого наследуются элементы.

Таким образом, вы можете создать элемент нужного типа и проверить, если он обладает требуемым свойством:

'src' in document.createElement('div'); // false 
'src' in document.createElement('img'); // true 

Примечание Атрибуты IDL являются не чувствительны к регистру, а некоторые имеют разные названия, чем атрибуты контента, например, вы должны проверить className вместо class.

+0

Это точно, что мне нужно. Спасибо также за ссылку W3, очень полезно! –

+0

В качестве дополнения также полезно знать «className». –

+0

еще один вопрос, знаете ли вы, что можно показать 'document.createElement()' как объект? Чтобы я мог видеть все его содержание? –

0

Поскольку они не могут следовать той же канонический формат, на мой взгляд, вы можете сделать работу вокруг него, делая каждый из этих тегов с его разрешенных атрибутов как JSON или многомерные массивы

Это JS Fiddle показывает простой пример

var DOMarray = { 
 
    'div': ['id', 'class'], 
 
    'a': ['href', 'id', 'class'], 
 
    'img': ['src', 'id'] 
 
}; 
 

 

 
document.getElementById('test').innerHTML = '<strong>for the img tag, allowed attributes: </strong>' + DOMarray['img'];
<div id="test"></div>

+0

Можете ли вы подробно рассказать ...? –

+0

Посмотрите сейчас :) –

+0

Спасибо! Но если я сейчас установил DOMarray с этим: ''img': ['src', 'id', 'blah']' он будет выводить: 'для тега img, разрешенных атрибутов: src, id, blah'. И я пытаюсь получить * только * действительные атрибуты. –

Смежные вопросы