Изменить прототип объекта метатег - PullRequest
0 голосов
/ 07 октября 2011

Я динамически генерирую метатеги. Я могу добавить свойства объекта, которые являются частью прототипа метатега по умолчанию. name, content и ID. Но когда я пытаюсь добавить что-то другое к объекту, скажем foo, он не добавляется.

Как добавить собственное свойство, чтобы я мог добавить к нему таким же образом, как я добавляю name id и content в примере.

var headID = document.getElementsByTagName("head")[0];        
var metaNode = document.createElement('meta');
metaNode.name = "name"; //appends
metaNode.id = "id"; //appends
metaNode.content = "content"; //appends
metaNode.foo = "bar"; //doesn't append
headID.appendChild(metaNode);

результат: <meta id="id" name="name" content="content">

хочу: <meta id="id" name="name" content="content" foo="bar">

Ответы [ 3 ]

1 голос
/ 07 октября 2011

Более совместимый со стандартами способ сделать это состоит в добавлении префикса к data-:

metaNode.setAttribute("data-foo", "bar");

Хотя, результат будет:

<meta id="id" name="name" data-foo="bar" />
1 голос
/ 07 октября 2011

metaNode.setAttribute ('foo', 'bar');

0 голосов
/ 07 октября 2011

Когда вы добавляете свойство к объекту DOM, некоторые браузеры также добавляют атрибут с тем же именем независимо от того, что это такое (например, IE), другие добавляют атрибут только в том случае, если имя совпадает со стандартным атрибутом ( например Firefox).

Если вы действительно хотите иметь дело с нестандартными атрибутами, используйте get / setAttribute, но он немного ошибочен в IE, поэтому используйте его только для нестандартных атрибутов, используйте свойства для всего остального. И если вы добавляете нестандартные свойства, лучше всего хранить их в объекте javascript, а не модифицировать объекты DOM (в основном потому, что вы можете помешать стандартным свойствам DOM или тем, которые добавлены другим кодом).

Кроме того, объекты DOM являются хост-объектами, поэтому может не понравиться, если вы добавляете нестандартные свойства (опять же, нет спецификации, в которой говорится, что они должны вам разрешать).

Наконец, нет оснований полагать, что существует конструктор мета-элемента, что он имеет прототип или что экземпляры мета-элементов наследуются от этого прототипа. Некоторые браузеры реализуют javascript-подобное наследование прототипов для объектов DOM, другие - нет. Ничто не говорит о том, что объекты DOM должны использовать наследование прототипа (а некоторые нет).

...