为什么我不能以相同的方式引用所有属性
Why can't I refer to all attributes the same way?
我正在动态创建一个输入标签,它具有以下属性。
<input id='beep' id2='boop'></input>
虽然我可以通过以下两种语法中的任何一种来引用第一个
var tag = document.getElementById("beep");
alert(tag.id);
alert(tag.attributes["id"]);
当涉及到我的自定义属性 id2 时,我被迫使用后者。为什么?
var tag = document.getElementById("beep");
alert(tag.id2); // doesn't work - I get *undefined*
alert(tag.attributes["id2"]);
alert(tag["id2"]); // doesn't work - I get *undefined*
你在这里混合了两件事:HTML和DOM.HTML具有标记和属性的概念,而DOM具有节点和属性的概念,尽管它们看起来很相似,但它们是独立的技术(至少在其核心)。
创建 DOM 元素时,只有官方 HTML 属性(甚至可能不是全部)映射到 DOM 属性。在此过程中也可能被修改。哪些属性在 DOM 节点上可用,在 DOM 和 HTML DOM 规范中定义。
input
元素的 value
属性示例:
当元素的
type
属性具有值"text"
、"file"
或"password"
时,这表示交互式用户代理中相应表单控件的当前内容。更改此属性会更改窗体控件的内容,但不会更改元素的 HTMLvalue
属性的值。当元素的type
属性的值为"button"
、"hidden"
、"submit"
、"reset"
、"image"
、"checkbox"
或"radio"
时,这表示元素的HTML值属性。请参阅 HTML 4.01 中的值属性定义。
或者在DOM中className
的class
HTML属性:
元素的
class
属性。由于与许多语言公开的"class"
关键字冲突,此属性已被重命名。请参阅 HTML 4.01 中的class
属性定义。
您可以通过 .getAttribute
访问所有 HTML 属性。
只有标准属性具有相关属性,id2
是非标准的,因此它没有关联的属性。
有些浏览器确实支持您尝试执行的操作,但我不知道确切是哪个,对于自定义属性,请使用<input data-id2="boop" />
并像这样访问它:
var tag = document.getElementById("beep");
var id2 = tag.dataset.id2
有关元素数据集,请参见
- 如何处理javascript中的循环引用,类似于Excel提供迭代限制的方式
- 在没有ajax的情况下将多个变量传递到引用页面的最佳方式
- 在方法中的函数中引用 CoffeeScript 类中的“this”的最佳方式是什么?
- 组内的正则表达式子组以及引用它们的方式
- JavaScript 的这个对象是否以我认为的方式引用新创建的对象
- Javascript:从给定的两个片段中引用“this”的可接受方式
- 有没有快捷方式可以引用我的 DIV 中的元素
- 单例在JS/coffeescript中引用自身的优雅方式
- 如何通过引用传递超时?或者更好的实施方式
- 使用AngularJS和TypeScript以简单的方式引用
- 在对象中引用Javascript对象的正确方式
- 引用导出属性的多种方式之间的差异
- 在UserControl(ascx)中引用javascript的最佳方式
- YUI库-保持对对象的全局引用的最佳方式
- 从另一个属性引用js属性的正确方式
- 将javascript函数的guid作为值而非引用传递的最佳方式
- 以编程方式添加视图,然后引用这些视图
- 在Angular中,在闭包中引用服务属性/方法最合适的方式是什么?
- 使用反向引用的最佳方式是什么?
- 通过快捷方式引用Javascript对象