你如何组织Javascript verboseness?

时间:2009-04-03 14:09:12

标签: javascript greasemonkey

我正在编写一个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);
}

大声笑,这当然看起来更好

6 个答案:

答案 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>