【问题标题】:Does properties and Attributes mean same in JavaScript? [closed]属性和属性在 JavaScript 中的含义相同吗? [关闭]
【发布时间】:2013-03-11 07:17:28
【问题描述】:

属性和属性在 IE 8 及更低版本中的处理方式类似。

它们的意思是一样的吗?

【问题讨论】:

  • HTML 元素也可以同时具有属性和属性。属性可以使用 dot(.) 运算符和 javascript 对象访问,而属性只能使用 DOM 中定义的 getter 和 setter 访问。请参阅问题。已编辑问题。 :)
  • 我已将您的问题恢复为原始形式。如果您想发布自己的答案,请将其发布为下面的答案;不是对您的问题的编辑。此外,在有人回答问题后编辑问题的含义或目的是不正确的。
  • 这个问题和它被接受的答案具有误导性,可能会在 JavaScript 新手中产生误解。整个线程,包括讨论和论点都应该通读。原始发帖人回答了这个问题(并接受了答案)。答案从根本上是有缺陷的。在他对其他人的回答中,他认为 属性可以使用带有 javascript 对象的点(。)运算符来访问,而属性只能使用 DOM 中定义的 getter 和 setter 来访问。跨度>
  • Getter 和 setter 确实是访问属性的一种方便的方式,但是断言这是访问它们的ONLY 方式从根本上是错误的。它否认了在 javascript 中没有私有变量的基本事实,如果程序员知道它们在哪里,他/她可以使用点或数组表示法访问它们。请参阅我的示例jsfiddle.net/radiotrib/p8Wep/5 - 应该删除或清理此线程(以及由同一张海报在同一主题上打开的另一个线程)。
  • 根据 Andrew Barber - 再次回滚。

标签: javascript dom html4


【解决方案1】:

What is the difference between attribute and property? 对语义...以及术语的不同语言用法进行了相当多的讨论...

【讨论】:

  • 您提供的链接与我要分享的内容不符。请参阅我编辑的问题。 :)
  • 这看起来不像我最初回答的问题
  • 我已将问题编辑回其原始形式,并要求 OP 不要再这样做了。也就是说,我有一个答案建议:请尝试在此处充实它,而不是让它只是指向外部资源的链接。也就是说,如果最初的意图正在改变,您可能希望也可能不想在问题上花费精力......
  • 谢谢 Andrew .. 我想我会让这个过去的。我提供的链接背后的线索比我能说的要多得多,除非绝对必要,否则我不喜欢复制东西。
【解决方案2】:

@所有认为自己相同的人:

没有。

HTML 元素的属性和属性不相同。

从 DOM 的角度来看: 属性是私有变量,属性存储在 NamedNodeMap 中,存储为 HTML 元素的 childNode

从 JavaScript 的角度来看(实现): var elem = document.getElementById("ID");

elem.prop = somevalue; //访问属性

elem.getAttribute("attributeName"); //访问属性:getter elem.setAttribute("attributeName","value"); //访问属性:setter

有关实施细节,请参阅我的其他答案。

【讨论】:

  • 请在 Safari/Chrome 等 HTML4 文档中检查自定义属性(由用户定义)不能作为 elem.attributeName 访问。
  • 您原来的断言是:** HTML 元素也可以同时具有属性和属性。属性可以使用带有 javascript 对象的点(。)运算符来访问,而属性只能使用 DOM 中定义的 getter 和 setter 来访问** 鉴于您对我对您对 Joeframbach 的回答的评论的反驳。我认为属性和属性都可以使用点符号来访问。请提供一个真实的示例,以便我可以使用您自己选择的 DOM 对象查看这是否正确。
  • 我的工作示例响应您的断言“只能使用 getter 和 setter 访问属性”...jsfiddle.net/radiotrib/p8Wep/5...
  • obj.customAttribute -- 仅在 IE8 及以下版本
  • 该评论是否应该在此讨论的上下文或内容中添加一些内容?
【解决方案3】:

属性和属性在 DOM 中是不同的。但是,在 IE 8 及更低版本中的处理方式类似。

我遇到了跨浏览器兼容性问题。

问题:自定义属性在 IE8 的 HTML4/JavaScript 中作为属性被访问。需要使 HTML 与 Chrome、Safari 和 IE9 兼容。

解决方案:可以迭代元素以检查自定义属性并将其添加为属性。

示例代码:

var propertyName = obj.attributes[index].nodeName; //(属性名不区分大小写) obj [属性名称] = 值; //(检查obj.customAttribute的实现)

提示: 与 IE 8 及更低版本不同,IE 9 及更高版本已解决该问题,并以不同方式处理属性和属性。

【讨论】:

  • 这在技术上是缺乏的.. var propertyName = obj.attributes[index].nodeName; 是不够的,因为实际属性的索引必须提前知道属性名称以外的属性 - 澄清见jsfiddle.net/radiotrib/p8Wep/8 的最后一行 -设置名为 'thing' 的属性的正确表示法应该是 obj.attributes.thing.value = value; - 无需对 attributes 属性进行迭代即可找到该属性。如需澄清,请参阅上面链接中的 jsFiddle 的其余部分。
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 2022-07-07
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多