我正在编写一个GM脚本,有一件事我意识到我反复做的是一遍又一遍地做同样的代码。具体来说,是样式属性。
function createButton() {
var a = document.createElement('a');
a.href = '#';
a.innerHTML = 'Print Topic';
a.style.position = 'absolute';
a.style.right = '3em';
a.style.top = '6em';
a.style.fontFamily = 'Arial,Helvetica,sans-serif';
a.style.fontWeight = 'bold';
a.style.fontSize = '125%';
a.style.background = '#777777 none repeat scroll 0 0';
a.style.color = 'white';
a.style.padding = '6px 12px';
document.body.insertBefore(a, document.body.lastChild);
}
正如您在我的示例代码中看到的,我反复多次写过a.style。你有技术可以避免这种混乱吗?只是为了优雅。
谢谢 -伙计们,这是简化代码:
function createButton() {
var a = document.createElement('a');
var css = document.createElement('style');
css.type = 'text/css';
css.innerHTML = '#prt { position:absolute; right:3em; top: 6em; font-family: Arial,Helvetica,sans-serif; font-weight:bold; font-size:125%; background: #777777 none repeat scroll 0 0; color: white; padding: 6px 12px;}'
a.href = '#';
a.innerHTML = 'Print Topic';
a.id = 'prt';
document.body.insertBefore(a, document.body.lastChild);
document.body.appendChild(css);
}
大声笑,这当然看起来更好
答案 0 :(得分:12)
将样式属性放入CSS类中,然后只是动态交换类而不是显式地执行每个样式属性。
答案 1 :(得分:1)
不是很好但可能比原来更好的答案:
s = a.style;
s.position = "absolute";
...etc...
s.color = "white";
答案 2 :(得分:1)
尝试
如果你使用的是jQuery,你可以写:
$("a").css({position: "absolute", right: "3em", top: "6em"}) // etc.
答案 3 :(得分:1)
jQuery通过一个魔术函数$()来缩短你的dom元素的包装。
包装器使您可以访问所有css属性,以及几乎所有方法 (即安装者回馈“这个”),包括CSS设置者。
一个例子会更清楚......
$("<a href='toto/'></a>")
.css("position", "absolute");
.css("right", "3em")
.appendTo($(containerid));
答案 4 :(得分:1)
Javascript有一个with声明......
with a.style {
position = 'absolute';
right = '3em';
}
您可以将重复的功能拆分为一个函数,并将元素作为参数传递...
function setStyle(elem) {
with elem.style {
position = 'absolute';
right = '3em';
}
return elem
}
//Invoke like this: elem = setStyle(elem)
答案 5 :(得分:0)
详细阐述上述最高投票的答案。 只需将所有css信息放入css类即可。然后只分配了class属性。
<style type='text/css'>
a .prt {
position:absolute;
right:3em;
top: 6em;
font-family: Arial,Helvetica,sans-serif;
font-weight:bold;
font-size:125%;
background: #777777 none repeat scroll 0 0;
color: white; padding: 6px 12px;
}
</style>
<script>
function createButton() {
var a = document.createElement('a');
a.class= 'prt';
document.body.insertBefore(a, document.body.lastChild);
}
</script>