如何使用 jQuery 只删除一个样式属性?

Posted

技术标签:

【中文标题】如何使用 jQuery 只删除一个样式属性?【英文标题】:How to remove only one style property with jQuery? 【发布时间】:2011-08-22 12:32:49 【问题描述】:

我有一个带有此属性的 div style="-moz-user-select:none; position:static !important;"。 我需要删除-moz-user-select 尝试使用$(selector).css(),但我不知道要设置什么值,因为它是"none"

【问题讨论】:

如果是none,为什么要去掉呢?如果您需要将其更改为另一个值here 是一个有效值列表 【参考方案1】:

css() 的文档说,将样式属性设置为空字符串将删除该属性,如果它不驻留在样式表中:

设置样式属性的值 到一个空字符串——例如 $('#mydiv').css('color', '') — 删除 元素的那个属性,如果它 已经直接申请了, 是否在 html 样式属性中, 通过 jQuery 的 .css() 方法,或者 通过直接 DOM 操作 样式属性。然而,它并没有, 删除已应用的样式 在样式表中使用 CSS 规则或 <style> 元素。

由于你的样式是内联的,你可以这样写:

$(selector).css("-moz-user-select", "");

【讨论】:

@KevinFegan document.getElementById('mydiv').style.removeProperty('-moz-user-select')【参考方案2】:

我知道这个问题是关于 jQuery 的,但想添加(对于像我这样的人,他们从谷歌在这里偶然发现)一个带有 vanilla js 的解决方案:

(基于我的GIST

下面是该方法的细分,但删除了 cmets,它非常小而简单的单行 split->filter->join

const removeStyleProp = (elm, prop) => 
  elm.style.cssText = elm.style.cssText // "top: 0px; bottom: 50px; text-align: right;"
    .split('; ') // ["top: 0px", "bottom: 50px", "right: 2px", "text-align: right;"]
    .filter(p => !p.startsWith(prop) ) // ["top: 0px", "bottom: 50px", "text-align: right;"]
    .join(';');

// usage:
removeStyleProp(test, 'right')
console.log( test.style.cssText )
<div id='test' style='top:0;right:5px;bottom:50px;right:2px;text-align:right;'></div>

也可以使用正则表达式完成

【讨论】:

【参考方案3】:

您也可以将“-moz-user-select:none”替换为“-moz-user-select:inherit”。如果没有定义父样式,这将从任何父样式或默认样式继承样式值。

【讨论】:

继承没有删除

以上是关于如何使用 jQuery 只删除一个样式属性?的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何删除选中的css样式

jquery 如何动态添加、删除class样式

如何去除jquery mobile 的css样式

从零开始学习jQuery 使用jQuery操作元素的属性与样式

如何从内联样式属性中获取值并将其放入最接近的输入值中? jQuery

创建和删除DOM元素