2009-04-03 2 views
1

Я кодирую GM-скрипт, и одна вещь, которую я понял, что я делаю неоднократно, делает один и тот же код снова и снова. В частности, свойство стиля.Как организовать Javascript verboseness?

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); 
} 

LOL, что, безусловно, выглядит лучше

+0

Действительно ли ваш «сокращенный код» должен быть шуткой или чем-то еще? –

+0

rymn, вы также можете определить атрибуты стиля в отдельном .css-файле, а затем связать файл на своей странице с помощью тега ссылки. Другой альтернативой является определение атрибутов стиля в теге стиля. Это позволит избежать необходимости определять атрибуты стиля в JavaScript-коде. – AndreiM

+0

HTML4.01 не позволяет создавать элементы стиля в теле, поэтому браузеры могут игнорировать их; Chrome сделал это в прошлом, я не знаю о текущих версиях - см. Http://stackoverflow.com/questions/524696/ – Christoph

ответ

12

Поместите атрибуты стиля в классы CSS, то просто динамически менять классы вместо сделать каждый атрибут стиля явно.

+1

<- this, dear jesus this – annakata

1

не-очень-хорошо-но-возможно, лучше, чем самый оригинальный ответ:

s = a.style; 

s.position = "absolute"; 
...etc... 
s.color = "white"; 
+0

AFAIK, некоторые браузеры будут рассматривать s как ссылку, а другие - как копию, чтобы вы могли столкнуться с проблемами с кросс-браузером. Я мог бы быть абсолютно неправ. – Macha

+0

, если вы собираетесь идти по этому маршруту, (a.стиль) было бы лучше, если вы не поверите ложью крокфорда. – annakata

+0

Всегда за хорошую ложь. Расскажи мне больше! – KooiInc

1

Попробуйте

Если вы используете JQuery вы могли бы написать:

$("a").css({position: "absolute", right: "3em", top: "6em"}) // etc. 
+0

Спасибо, я кодирую в Greasemonkey и хочу узнать больше о голом металле Javascript. = D – rymn

1

jQuery делает вещи короче через магическую функцию $(), которая возвращает оболочку вашего элемента dom.

Обертка дает вам доступ ко всем свойствам css и почти всем его методам (т.е. сеттеры возвращают «это»), включая настройки CSS.

Это будет понятнее с примером ...

$("<a href='toto/'></a>") 
    .css("position", "absolute"); 
    .css("right", "3em") 
    .appendTo($(containerid)); 
+0

Да, jQuery отлично. Сейчас я пытаюсь использовать Javascript. Я вроде хочу знать самую деталь Javascript. – rymn

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) 
+0

Это работает кроссбраузер? – Macha

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> 
+0

, который должен читать 'a.className = 'prt'; '' '' '' является зарезервированным словом и может привести к проблемам при использовании в качестве имени без кавычек – Christoph

Смежные вопросы