预先添加所有CSS选择器

是否有文本filter或javascript / jquery函数,它会在样式表中添加所有css选择器? 我试图用twitter引导程序只影响一个div,但它影响了它之外的侧边栏,无论如何要做到这一点? (我不想使用iframe。)

编辑:

我想要的是,能够为ID文件中的每个选择器添加ID“#content”。

您在sabithpocker的回答下发表的评论告诉我,您不是动态地更改样式,而是要静态修改CSS。 我认为这对于正则表达式来说是最简单的:

查找: ([,|\}][\s$]*)([\.#]?-?[_a-zA-Z]+[_a-zA-Z0-9-]*)
替换为: $1#content $2

正则表达式的细分

  • ([,|\}][\s$]*) – 查找}或者,从前一个样式后跟空格(空格/制表符: \s ,换行符: $ )。 右括号\逗号使正则表达式无法在你的风格体内查看。
  • [\.#]? – 匹配起始#. 在样式名称中,如果它存在。
  • -?[_a-zA-Z]+ – CSS样式名称可以以下划线或字母开头。 此外,样式名称可以由破折号预先添加。
  • [_a-zA-Z0-9-]* – 匹配样式名称的其余部分。 这可以省略,但知道修改的所有样式的样式名称可能会很好。
  • $1#content $2} (或者)和空格保持原样( $1 )。 接下来是插入的文本#content (注意空格),然后是样式名称( $2 )。

我在Notepad ++中对它进行了测试,它适用于我的样式表。
应该注意的是,如果你的CSS没有被压缩(并且是多行的),你将需要支持多行正则表达式的编辑器(Notepad ++)。

改进了RustyTheBoyRobot和BoltClock♦回答允许评论和媒体查询。

查找: ([,|\}][\s$]*)((?|\/\/.*[\s$]+|.*\/\*.*\*\/[\s$]*|@media.*\{[\s$]*|)*)([\.#]?-?[_a-zA-Z]+[_a-zA-Z0-9-]*)

替换为: $1$2 #content $3

编辑

我注意到我提供的代码仅适用于PHP。

这是一个应该在Javascript和PHP中运行的改进版本

正则表达式*

 (^(?:\s|[^@{])*?|[},]\s*)(\/\/.*\s+|.*\/\*[^*]*\*\/\s*|@media.*{\s*|@font-face.*{\s*)*([.#]?-?[_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^}]*{) 

完整示例*

 var outputString = inputString.replace( /(^(?:\s|[^@{])*?|[},]\s*)(\/\/.*\s+|.*\/\*[^*]*\*\/\s*|@media.*{\s*|@font-face.*{\s*)*([.#]?-?[_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^}]*{)/g, "$1$2 #content $3" ); 

这也应该用background: linear-gradient(to bottom, #ae9e9e, #454545);修复@Mariano Martinez Peck问题background: linear-gradient(to bottom, #ae9e9e, #454545); 以及@font-face

使用SCSS可以更轻松地完成此操作。 只需使用现有的CSS,使用#my-new-selector {…}将其嵌套,然后通过SCSS到CSS编译器运行(有一些在线工具可以执行此操作而无需安装任何内容。

解决方法(如果你真的需要这样做):

  1. 等到窗口加载并应用所有样式
  2. 抓取您想要应用的样式完整的元素
  3. 获取他们的样式并将其应用于内联

对于跨浏览器实现,您可以使用下面显示的jquery插件:

 $('#mydiv *').each(function(){ $(this).css($(this).getStyleObject()); }); 

然后禁用原始样式表

 document.stylesheets[n].disabled = true; //or use this : $('link[title=mystyle]')[0].disabled=true; //n should be index of style sheet -- counts external + internal style sheets 

插入:

 /* * getStyleObject Plugin for jQuery JavaScript Library * From: http://upshots.org/?p=112 */ (function($){ $.fn.getStyleObject = function(){ var dom = this.get(0); var style; var returns = {}; if(window.getComputedStyle){ var camelize = function(a,b){ return b.toUpperCase(); }; style = window.getComputedStyle(dom, null); for(var i = 0, l = style.length; i < l; i++){ var prop = style[i]; var camel = prop.replace(/\-([az])/g, camelize); var val = style.getPropertyValue(prop); returns[camel] = val; }; return returns; }; if(style = dom.currentStyle){ for(var prop in style){ returns[prop] = style[prop]; }; return returns; }; return this.css(); } })(jQuery); 

没有样式表只是一个复制粘贴文件。 您必须使用唯一标识符包装所需的所有内容,然后使用此唯一标识符引用它。