检测键是否应被视为样式或属性

Detect if a key should be treated as a style or attribute

我有以下功能:

var applyStyling = function (element, object) {
    return _.each(object, function (value, key) {
       // determine whether the key should be treated as an attribute or style 
         if(style)
            element.style.key = value
         element.setAttribute(key, value)
    })
}

一个示例使用类似于

applyStyling('some dom element', {'id' : 'someID', 'zIndex' : 10})

如何检测键是否应被视为样式或属性?我只能找到如何检查 attribute/style 是否已在元素上设置。

var applyStyling = function (element, object) {
    return _.each(object, function (value, key) {
       // determine whether the key should be treated as an attribute or style 
         if(element.hasAttribute(key))
             element.setAttribute(key, value)
         else if (element.style.hasOwnProperty(key))
             element.style[key] = value
    })
}

编辑:根据 OP 评论修改答案

var applyStyling = function (element, object) {
    return _.each(object, function (value, key) {
       // determine whether the key should be treated as an attribute or style 
         if (element.style.hasOwnProperty(key))
             element.style[key] = value
         else
             element.setAttribute(key, value)
    })
}

恐怕没有快速的答案。您可以 list/check 已经定义的属性。但是,您如何 预先列出 DOM 元素上的用户定义属性或浏览器定义的属性(如样式属性)。

您甚至可以为两者使用相同的名称(保留),设置 element.zIndex 和 element.style.id 不会出错。

不错的技巧。 预先列出供您使用和滥用。

var applyStyling = function (element, object) {
  for(var key in object) if(object.hasOwnProperty(key)) {
    if(element.style[key] !== void 0)
      element.style[key] = object[key];
    else
      element.setAttribute(key, object[key]);
  }
}

var applyStyling = function (element, object) {
  for(var key in object) if(object.hasOwnProperty(key)) {
    if(element.style[key] !== void 0)
      element.style[key] = object[key];
    else
      element.setAttribute(key, object[key]);
  }
}
applyStyling(document.documentElement, {
  color: 'red',
  title: 'tooltip'
});
Some text