2016-11-28 15 views
1

Рассмотрим следующий фрагмент кодаJS строгий режим: Почему (! Только) Край жалуются, назначая свойство стиля

"use strict"; 
var el = document.createElement('div'); 
el.className = 'bluebox'; 
el.style = 'background:blue; width:100px; height: 100px'; 
document.getElementsByTagName('body')[0].appendChild(el) 

Firefox и Chrome делают создать элемент

<div class="yolo" style="background: blue none repeat scroll 0% 0%; width: 100px; height: 100px;"> 

Но края бросает ошибка:

Assignment to read-only properties is not allowed in strict mode 

Что здесь происходит? Является ли атрибут стиля фактически доступным только для чтения, а FF и Chrome ведут себя неправильно или имеют Edge другую концепцию строгого режима или ...? Как я мог найти это, не спрашивая здесь?

+2

el.style.background = '' будет путь. Даже если другие браузеры не жалуются - это не сработает. Край на самом деле прав. – Lain

ответ

1

What is happening here?

Не так много .. вы попытались ошибочно назначить коллекцию имущества.

Is the style attribute actually read-only and FF and Chrome behave incorrectly or do has Edge another concept of strict mode or...?

Нет, если бы установить его в качестве атрибута (SetAttribute ('стиль', '')), все работало бы. Однако свойство - это объект - коллекция и действует по-разному. На этот раз Edge действительно прав.

How could I possibly find this out without asking here?

Вы можете читать и Google:

https://www.w3.org/wiki/Dynamic_style_-_manipulating_CSS_with_JavaScript https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style

Exmaples:

elt.style.cssText = "color: blue"; // Multiple style properties 

elt.setAttribute("style", "color: blue"); // Multiple style properties 

elt.style.color = "blue"; // Directly 

var st = elt.style; 
st.color = "blue"; // Indirectly 
+0

В вашей ссылке не указано, что IE не любит синтаксис в вопросе OP _Styles можно установить, назначив строку непосредственно свойству стиля (как в elt.style = "color: blue;"), который пересылает его как el .style.cssText = "color: blue;" , хотя он возвращает объект CSSStyleDeclaration, который доступен только для чтения. ..., если вы не хотите установить полный стиль в одном утверждении, так как использование свойств стиля не будет перезаписывать другие свойства CSS, которые уже могут быть установлены в атрибуте style._ – mplungjan

+0

@James Thrope: Спасибо за отзыв. Оценивается :) – Lain

+0

@mplungjan: Это строго верно. Тем не менее документация обычно говорит, что «делают», а не все случаи того, что «вещи не делают». – Lain

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

  • Нет связанных вопросов^_^