相关问题答案不尽如人意:Changing CSS Values with Javascript
这是我想做的。我希望能够将页面元素的类设置为某个值,并让浏览器对其进行动画处理,例如将背景设置为 rgb(255*(cos(time)*.5) 的表格 td +.5),0,0)。
我可以通过设置计时器轻松地为单个元素执行此操作。但我可能希望多个元素具有此属性,并且必须为每个元素跟踪一个计时器并不是一个好主意。
所以我想做的是能够从 javascript 更改 CSS 值。
我正在查看代码 here我觉得它对我来说太笨重了,无法从计时器使用。从外观上看,每次调用 changecss 之类的函数时,我都会将整个 css 规则附加到每个样式表。这将主要污染内部样式表,如果我每 33 毫秒在循环中调用它,可能会导致失控的内存泄漏。
因此,我正在寻找一种解决方案,让我可以将对应于特定类的 css 条目中的 rgb 颜色设置归零。并修改它。在这种情况下,我实际上不需要检索原始设置。这可以做到吗?如果可能的话,我想支持 IE9,尽管 IE 6、7、8 已经把我的元素搞得一团糟以至于我放弃了它们。
最佳答案
该答案具有基础知识。作为一般解决方案,您需要在样式表中找到类的最后一次出现(即遍历所有样式表以找到类规则的最后一次出现),然后在之后添加新规则或修改最后一次规则。
如果你知道类只存在一次,你可以只获取第一次出现并修改它。或者,如果您知道该类根本不在样式表中,只需将它添加到任何地方(比如最后一个样式表),然后从那里开始。
您可以通过存储对规则的引用并随时间使用 setTimeout 更改它来轻松地为其设置动画。
例如,我更改 css 规则的库例程是:
/* Replace the cssText for rule matching selectorText with value
** Changes all matching rules in all style sheets
*/
function modifyStyleRule(selectorText, value) {
var sheets = document.styleSheets;
var sheet, rules, rule;
var i, j, k, l;
for (i=0, iLen=sheets.length; i<iLen; i++) {
sheet = sheets[i];
// W3C model
if (sheet.cssRules) {
rules = sheet.cssRules;
for (j=0, jLen=rules.length; j<jLen; j++) {
rule = rules[j];
if (rule.selectorText == selectorText) {
removeRule(sheet, rule);
addRule(sheet, selectorText, value);
}
}
// IE model
} else if (sheet.rules) {
rules = sheet.rules;
for (k=0, kLen=rules.length; k<kLen; k++) {
rule = rules[k];
// An alternative is to just modify rule.style.cssText,
// but this way keeps it consistent with W3C model
if (rule.selectorText == selectorText) {
removeRule(sheet, rule);
addRule(sheet, selectorText, value);
// Alternative
// rule.style.cssText = value;
}
}
}
}
}
/* Remove rule from supplied sheet
*/
function removeRule(sheet, rule) {
// W3C model
if (typeof sheet.deleteRule == 'function') {
sheet.deleteRule(rule);
// IE model
} else if (sheet.removeRule) {
sheet.removeRule(rule);
}
}
/* Add rule from supplied sheet
** Rule is added as last rule in sheet
*/
function addRule(sheet, selectorText, value) {
// W3C model
if (typeof sheet.insertRule == 'function') {
sheet.insertRule(selectorText + ' {' + value + '}', sheet.cssRules.length);
// IE model
} else if (sheet.addRule) {
sheet.addRule(selectorText, value, sheet.rules.length);
}
}
要为更改设置动画,请使用 setTimeout 调用具有相同选择器但不同值的函数。
关于javascript - 从 Javascript 更改(全局)CSS 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657363/
如何正确创建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
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我在我的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重新插入来做到这一点,这是问题的一部分。
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
我有一个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中任何一个上的