编辑 2015-10-07 1624 CST
这个问题已被标记为可能重复 - 我发布它的原因是其他问题的答案都没有提供我想要的所有信息,我想要一种简单直接的方法来做到这一点。我可以控制样式表和规则的顺序,以便引用正确的规则。我还想就这种方法的可行性得到反馈,因为它在 future 会被打破。
查看我在下面发布的评论,了解我不接受可能重复问题的答案的其他原因。
**原始问题如下**
我搜索了一个这样的问题,并找到了一些解决问题的一部分,但不能同时检索和更改伪元素的 CSS 值,如 ::before和 ::after .
在来这里之前我已经用谷歌搜索了网络,基本上我发现没有理想的方法可以做到这一点。
我找到了一种适用于 FF 40、IE 9 和 Chrome 45.0.2454.101 m 的方法,但我想知道我是否忽略了某些可能导致我的方法在某些情况下中断的东西。
我在网上和其他地方看到的关于访问或更改伪元素的 CSS 值的答案说,您不能直接访问这些元素,因为它们不是“DOM 的一部分”和“DOM 之外” "
他们说改变它们的唯一方法是创建一个新规则并将其附加到现有规则以覆盖编码值。
这是一个演示该方法的片段:
function changeColor () { // Flip psedo element's background color
var newColor,
currentColor;
// Get the current color
currentColor= document.styleSheets[0].cssRules[0].style.backgroundColor;
// flip the color
newColor = (currentColor== "red") ? "aqua" : "red";
// Change the color
document.styleSheets[0].cssRules[0].style.backgroundColor = newColor;
// put color in top message
document.getElementById("colorIs").innerHTML = newColor;
// display colors
document.getElementById("displayColors").innerHTML =
"Pevious color was " + currentColor +
", changed to " + newColor + ".";
// Change background of button (not needed but thought I'd throw it in)
document.getElementById("changeButton").style.backgroundColor = newColor;
} #testDiv::before {
background-color: aqua;
content: "psedo element ";
}
#changeButton {
background-color: aqua;
} <div id="testDiv">
This divsion has an pseudo ::before element whose background color is
<span id="colorIs">
aqua
</span>
<br>
<br> Click "Display and Flip Color" to display the colors
<br> and flip the color from aqua and red and vice versa.
</div>
<br>
<form method="post">
<input id="changeButton" name="change" type="button" value="Display and Flip Color" onclick="changeColor();">
</form>
<br>
<div id="displayColors">
</div><link 上的代码 id=引用 CSS 文件的标记。在这种情况下,我会使用 id="colorFlipFlop"currentColor = document.styleSheets[0].cssRules[0].style.backgroundColor;
document.styleSheets[0].cssRules[0].style.backgroundColor = newColor;
var beforeIndex = 0; // give a name to the index, in cssRules, of the rule we want to get and change.
var styleSheetObject = document.getElementById("colorFlipFlop"); // get a reference to the stylesheet object
currentColor = styleSheetObject.sheet.cssRules[beforeIndex].style.backgroundColor; // get current pseudo element background color
styleSheetObject.sheet.cssRules[beforeIndex].style.backgroundColor = newColor; // set new background color
最佳答案
操纵 CSSRule 代替 DOM 元素是一种晦涩但完全有效的(和 standardized )更改元素样式的方法。它之所以晦涩难懂,是因为它很困难,需要一个嵌套循环遍历所有样式表中的所有规则,以找到您想要更改的规则。它也很晦涩,因为它不是 super 有值(value)的——你通常可以通过访问 DOM 元素的 style 来完成同样的事情。属性(property)。
但是,对于伪元素,没有 DOM 元素。伪元素是样式规则的产物,所以操纵伪元素的唯一方法是通过样式规则。人们建议添加样式规则,因为这比找到样式规则并编辑它更容易。但是查找和编辑它是完全有效的。
通过添加样式规则一次,然后保留对该规则的引用并对同一规则进行后续编辑,您可以两全其美。
关于javascript - 检索或更改伪元素的 css 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981211/
如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设
我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe
假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。
查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
我是HanamiWorld的新人。我已经写了这段代码:moduleWeb::Views::HomeclassIndexincludeWeb::ViewincludeHanami::Helpers::HtmlHelperdeftitlehtml.headerdoh1'Testsearchengine',id:'title'hrdiv(id:'test')dolink_to('Home',"/",class:'mnu_orizontal')link_to('About',"/",class:'mnu_orizontal')endendendendend我在模板上调用了title方法。htm