2014-07-10 19 views
7

Czytam książkę „jQuery Pocket Reference”, O'Reilly, 2011 Na stronie 15, to powiedziałUżywa jQuery attr(), aby ustawić „css”

„Na przykład wywołanie w ciekawy (" css ", {backgroundColor:" gray "}) jest tym samym, co wywołanie css ({backgroundColor:" gray "}). '

Ale nie mogę sprawić, że attr ("css", {}) działa. Mój kod testowy: http://jsfiddle.net/4UMN3/4/

$(function() { 
$("#btnChangeColor").click(function() { 
$("#spanText").attr("css", { backgroundColor: "gray" }); 

}); 

}); 

Sposób css() działa dobrze, http://jsfiddle.net/4UMN3/5/

Dzięki

+4

nic na ten temat w [Dokumenty] (http://api.jquery.com/ attr /). Może być [błąd w książce] (http://www.oreilly.com/catalog/errata.csp?isbn = 0636920016182). – Blazemonger

+8

Dlaczego musiałbyś użyć '.attr()' jeśli masz '.css()'? – j08691

+2

Czy odpowiada to [drugiemu potwierdzonemu błędowi na stronie O'Reilly'ego] (http://www.oreilly.com/catalog/errata.csp?isbn=0636920016182)? – Blazemonger

Odpowiedz

8

Wymienić:

$("#spanText").attr("css", { backgroundColor: "gray" }); 

z

$("#spanText").attr('style', 'background-color:gray'); 
2

myślę .attr jQuery() może jedynie wpływać na atrybuty element ma. HTMLElements nie znają atrybutu o nazwie "css" (co oznacza <div css="something"></div>).

więc prawidłowe wykorzystanie byłoby

$("#spanText").attr("style",{backgroundColor:"gray"}); 

Ale to wyprowadza

<span id="spanText" style="[object Object]">This is a test</span> 

przykładem, że rzeczywiście działa to

$("#spanText").attr("style","background-color:gray;"); 
+0

Funkcja '.css()' rozumie literalną składnię obiektu, metoda '.attr()' nie. – Alnitak

+0

Nigdy nie twierdziłem, że coś innego. Chciałem tylko pokazać, dlaczego przedstawiona składnia nie działa. – SVSchmidt

+2

Po prostu komentowałem dla dobra każdego czytelnika - nie krytykując twojej odpowiedzi. – Alnitak

3

Prawdopodobnie to miało być

$("#spanText").attr('style', 'background-color:gray'); 

To może działać, ale ma pewne problemy:

  • Korzystne jest, aby zmienić style własność zamiast style atrybut.
  • Zastąpi wszystkie uprzednio ustawione style wbudowane.

Następnie, jeśli używasz jQuery, lepiej użyć css metody:

$("#spanText").css('background-color', 'gray'); 

Ale style właściwość jest przydatna w Vanilla-JS:

document.getElementById("spanText").style.backgroundColor = 'gray'; 
0

=> metoda .css modyfikuje atrybut stylu nie "css".

$().att('style' , 'backgroundColor : gray'); 

=> nie ma takiego jak atrybutu css html

1

$("#id").attr('style', 'color:red;cursor:pointer');