当前位置: 首页 > 面试题库 >

JavaScript 如何使用.css()应用!important?

柴彬
2023-03-14
问题内容

我在应用的样式时遇到了麻烦!important。我试过了:

$("#elem").css("width", "100px !important");

什么都不做 ;
不会应用任何宽度样式。有没有一种类似jQuery的方式就可以应用这种样式而无需覆盖cssText(这意味着我需要先对其进行解析等)?

编辑
:我应该补充一点,我有一个样式表,该!important样式表中有我要用!important内联样式覆盖的样式,因此使用.width()等不起作用,因为它被我的外部!important样式覆盖。

此外,将覆盖以前的值的值 进行计算 ,所以我不能简单地创建另一个外部风格。


问题答案:

这些答案大多数现在已经过时,IE7支持不再是问题。

支持IE11 +和所有现代浏览器 的最佳方法是:

const $elem = $("#elem");
$elem[0].style.setProperty('width', '100px', 'important');

或者,如果需要,您可以创建一个小型jQuery插件来执行此操作。该插件css()在其支持的参数中紧密匹配jQuery自己的方法:

/**
 * Sets a CSS style on the selected element(s) with !important priority.
 * This supports camelCased CSS style property names and calling with an object 
 * like the jQuery `css()` method. 
 * Unlike jQuery's css() this does NOT work as a getter.
 * 
 * @param {string|Object<string, string>} name
 * @param {string|undefined} value
 */   
jQuery.fn.cssImportant = function(name, value) {
  const $this = this;
  const applyStyles = (n, v) => {
    // Convert style name from camelCase to dashed-case.
    const dashedName = n.replace(/(.)([A-Z])(.)/g, (str, m1, upper, m2) => {
      return m1 + "-" + upper.toLowerCase() + m2;
    }); 
    // Loop over each element in the selector and set the styles.
    $this.each(function(){
      this.style.setProperty(dashedName, v, 'important');
    });
  };
  // If called with the first parameter that is an object,
  // Loop over the entries in the object and apply those styles. 
  if(jQuery.isPlainObject(name)){
    for(const [n, v] of Object.entries(name)){
       applyStyles(n, v);
    }
  } else {
    // Otherwise called with style name and value.
    applyStyles(name, value);
  }
  // This is required for making jQuery plugin calls chainable.
  return $this;
};



// Call the new plugin:
$('#elem').cssImportant('height', '100px');

// Call with an object and camelCased style names:
$('#another').cssImportant({backgroundColor: 'salmon', display: 'block'});

// Call on multiple items:
$('.item, #foo, #bar').cssImportant('color', 'red');


 类似资料:
  • 问题内容: 我在应用的样式时遇到了麻烦。我试过了: 这 什么都不做 ; 不会应用任何宽度样式。有没有一种类似jQuery的方式来应用这种样式而不必覆盖(这意味着我需要先对其进行解析,等等)? 编辑 :我应该补充一点,我有一个样式表,该样式表中有我要用内联样式覆盖的样式,因此使用等不起作用,因为它被我的外部样式覆盖。 此外,将覆盖以前的值的值 进行计算 ,所以我不能简单地创建另一个外部风格。 问题答

  • 问题内容: 如何使用Javascript 添加CSS规则(例如)? 问题答案: 您也可以使用DOM Level 2 CSS接口(MDN)执行此操作: …(除了(自然地)IE8和更早版本以外的所有版本),它使用自己的边际差异措辞: 与createElement-set- innerHTML方法相比,此方法具有理论上的优势,因为您不必担心在innerHTML中放置特殊的HTML字符,但实际上,样式元素

  • 问题内容: 首先,我对专业从事这项工作不感兴趣。我是一名Web开发人员,我的一个同事最近离开了Spotify,他说他将主要在JavaScript中使用SpotifyDesktop应用程序。他说,它使用“ Chrome框架”,并且内部的所有内容都像网络应用程序(HTML / JS / CSS)一样完成。 作为一个从未为Desktop构建任何东西的Web开发人员,这是个好消息。如果我可以使用我已经知道

  • 问题内容: 是否可以使用JavaScript删除元素的CSS属性?例如我有,现在我想通过JavaScript删除zoom属性吗? 问题答案: 通常,您不能从这样的内置对象中删除属性,当然也不能从IE中删除属性(样式对象的zoom属性是IE扩展名) 您可以将其设置为默认值: 现在,有效缩放将来自样式表中定义的任何内容(通过链接和样式标签) 因此,此语法只会修改此元素的局部样式。

  • 问题内容: 是否可以使用Javascript将CSS样式表导入html页面?如果是这样,怎么办? 附言:JavaScript将托管在我的网站上,但我希望用户能够放入其网站的标签,并且它应该能够将托管在我的服务器上的CSS文件导入当前网页。(css文件和javascript文件都将托管在我的服务器上)。 问题答案: 这是这样做的“老派”方法,希望可以在所有浏览器上使用。从理论上讲,不幸的是,您将使用

  • 问题内容: 我想返回一个包含CSS规则所有内容的字符串,就像您在嵌入式样式中看到的格式一样。我希望能够在不知道特定规则中包含什么的情况下执行此操作,因此我不能仅通过样式名称(如等)将它们拉出。 CSS: 到目前为止的代码: 问题答案: 以scunliffe的答案为基础: