javascript - 获取 DOM 元素属性而不再次查询 DOM 并设置默认值(如果不存在)

标签 javascript dom

我使用以下方法获取 DOM 元素:

a = document.querySelector('[data-time]');

我想检查该元素是否具有其他特定属性。

如果有,我想获取它们的值或设置默认值。

我可以使用:

c = a.querySelector('[data-time-pre])

但我为每个属性调用 DOM。

所以我想到使用:

placeholder = a.attributes.placeholder

那么,在这种情况下,如果属性不存在,分配默认值的最简单方法是什么。

我找到了 hasOwnProperty('property1') 但我不确定我正在查找的属性是否继承,而且如果我需要使用多个 ifs有很多属性。

也许有这样的事情:

placeholder = (a.attributes.placeholder, 'default')

最佳答案

您可以执行以下操作:

  • 将属性名称和默认值构造为 k/v 对。
  • Array.map超过Object.keys属性/默认对。
  • 如果该键不作为属性存在,请使用默认值进行设置。
  • 返回现有或设置的属性。

const el = document.querySelector('#el')

const attrs = {
  // key : default value
  ['data-foo']: 'foo',
  ['data-bar']: 'bar',
  ['data-baz']: 'baz'
}

const results = Object.keys(attrs).map(key => {
  if (!el.hasAttribute(key))
    el.setAttribute(key, attrs[key])
   
  return { attr: key, value: el.getAttribute(key) }
})

console.log(results)
<div id="el" data-foo="hello-world"></div>

关于javascript - 获取 DOM 元素属性而不再次查询 DOM 并设置默认值(如果不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54492894/

相关文章:

javascript - Android Webview 键盘问题

javascript - offsetParent 与 parentElement 或 parentNode 的区别

javascript - 显示文本区域中重复的单词数

javascript - 具有多个转换的 transitionEnd 事件,检测最后一个转换

javascript - 在 LightSwitch HTML5 客户端中为超链接加下划线

JavaScript - 多个 HTML 框架中的多个全局对象?

javascript - 使用多个选择器和一个类获取 dom 元素的快捷方式?

javascript - IE 中的 DOM Level 2 和 3 核心支持?

javascript - 在不使用 JavaScript 的情况下通过 iframe 访问时从页面重定向?

javascript - 第 n 个类型元素的 css 选择器 - nth-of-type() 的奇怪实现