Javascript 检查HtmleElement是否包含value属性的最佳方法

Javascript 检查HtmleElement是否包含value属性的最佳方法,javascript,htmlelements,Javascript,Htmlelements,想象一个函数,其签名如下所示: function readElement(element: HTMLElement): string; 要实现该功能,您必须检查元素是否使用值属性(即HTMLInputElement)或textContent属性(即SpanElement),并获取相应的属性。我要问的是,有几种方法可以实现readElement,它们是万无一失的,并且具有很高的浏览器兼容性 以下是我过去用来解决这个问题的方法列表: element.value!==未定义 element.con

想象一个函数,其签名如下所示:

function readElement(element: HTMLElement): string;
要实现该功能,您必须检查元素是否使用
属性(即
HTMLInputElement
)或
textContent
属性(即
SpanElement
),并获取相应的属性。我要问的是,有几种方法可以实现
readElement
,它们是万无一失的,并且具有很高的浏览器兼容性

以下是我过去用来解决这个问题的方法列表:

  • element.value!==未定义
  • element.constructor.hasOwnProperty(“值”)
  • typeof element.value==“string”
  • [HTMLInputElement,HTMLTextAreaElement,…]一些(proto=>proto的元素实例)

要测试对象是否具有属性,只需在obj中使用
“prop”:

[…document.body.queryselectoral('*')].forEach((el)=>{
console.log(el.tagName+'包含:'+readEl(el));
})
函数读取器(el){
在el?el.value中返回“value”:el.textContent | | false;
}

文本区
div
如果(某个元素中的“值”)。
@AndréDS将在
@AndréDS上失败-这就是重点<代码>如果(element.value)
的value属性的值为空字符串,则它将报告false。哦,是的,我的坏@Quentin。我只是想提醒一下,在元素级阅读对于这个函数来说是一个非常糟糕的主意,深入到节点级。谢谢,忘记了它会阅读完整的原型链,而不像
hasOwnProperty
,这就是为什么
hasOwnProperty
首先存在的原因。Own虽然这是一种我没有想到的方法,但我希望还有一种方法不涉及检查值,比如
[HTMLInputElement,HTMLTextAreaElement,…]。一些(proto=>proto的元素实例)
,但是不必编写每个具有值属性的元素,对不起,我不明白你说的。建议的方法到底有什么不适合您的需要?如果像
HTMLInputElement
HTMLTextAreaElement
这样的元素实现了相同的原型,而不是直接实现
HTMLElement
,那么我们就能够实现抽象htmlElementTwithValue的
元素实例