【问题标题】:HTML Element - Does "value" attribute or property exist?HTML 元素 - “值”属性或属性是否存在?
【发布时间】:2019-02-22 21:01:29
【问题描述】:

如何确定 html 元素是否具有“值”属性/属性?

文本区域示例:

let textarea = document.createElement("textarea");
textarea.innerHTML = "Sike!"; 
console.log(textarea.hasAttribute("value")); // returns false (expected true)
console.log(textarea.hasOwnProperty("value")); // returns false (expected true)
console.log(textarea.value); // returns "Sike!";

Div 示例:

let div = document.createElement("div");
div.innerHTML = "Sike!"; 
console.log(div.hasAttribute("value")); // returns false (expected false)
console.log(div.hasOwnProperty("value")); // returns false (expected false)
console.log(div.value); // returns undefined; (expected thrown error)

【问题讨论】:

  • @bsplosion 我认为这个问题与这个问题没有任何关系。
  • 它是输入、选择、按钮还是文本区域?它有价值!可能的标签名称足够小,根本不需要用其他方式确定。
  • @LonnieBest 我的意思是,不一定。其中一些答案对你的情况有用。
  • 但是in 与原型链一起工作。试试看let a = {val: 42}; let b = Object.create(a); console.log('val' in b);
  • 看起来.value是一个继承自textarea元素对象原型的getter属性。但实际上这在任何地方都无关紧要。你的actual problem 是什么?

标签: javascript dom


【解决方案1】:

您可以测试元素的(非标准)__proto__ 属性中是否存在名为 'value' 的属性:

let textarea = document.createElement("textarea");
console.log('value' in textarea.__proto__);
console.log('foo' in textarea.__proto__);

【讨论】:

  • 您不需要测试__proto__ - 执行value in textarea 应该可以正常工作并已经检查原型链。如果它不起作用,那么__proto__ 也不起作用,因为该属性可能来自原型的原型,这需要递归检查所有原型。
  • 不要再使用__proto__,不要在代码、解释或答案中使用!它已被 Object.getPrototypeOf 弃用。
猜你喜欢
  • 2011-03-17
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 2010-09-12
  • 2015-01-29
  • 1970-01-01
  • 2017-01-12
相关资源
最近更新 更多