2017-02-21 20 views
2

В браузере, который отображает документ XHTML с элементами с именами, как я могу использовать JavaScript для доступа к свойствам элемента вне пространства имен HTML?Как получить доступ к .style на пространствах с именами в XHTML

document.getElementsByTagNameNS(namespace, tagName) возвращает коллекцию объектов, но объекты не имеют свойства стиля CSSStyleDeclaration (по крайней мере, в Chrome или Firefox).

Вы можете сказать, что по дизайну CSS является специфичным для HTML. Но с именами CSS стилей контент просто отлично. Таким образом, информация о стиле находится где-то там. Как мне его читать и писать?

Я хочу знать, например, какие элементы отображаются в виде блоков и какие встроенные.

(Изменить, чтобы добавить пример :)

Чтобы увидеть это, перейдите к www.johnmccaskey.com/style.xhtml. Синяя часть находится в пространстве имен HTML, красная часть - в пространстве имен http://www.tei-c.org/ns/1.0. CSS стилизовал их как отлично. Например, в консоли Chrome введите document.getElementsByTagName("box"). Вы увидите два объекта <box>. HTML-код имеет свойство .style, TEI - нет.

+0

'getElementsByTagNameNS' возвращает коллекцию элементов, так что результат не будет иметь никакого' style' собственности. Если вы делаете 'document.getElementsByTagNameNS (namespace, tagName) [0] .style', это что-то дает вам? –

+0

К сожалению, я имел в виду, что в объектах коллекции нет '.style'. Я отредактировал вопрос. – JPM

+0

Хорошо. Если бы вы могли включить некоторый код, который вызывает это поведение, было бы намного легче ответить. –

ответ

2

Свойство .style является отражением атрибута содержимого элемента HTML, например. <div style="color:green">, а не отражение его вычисленных стилей, полученных из каскада.

Для получения вычисленных значений используйте window.getComputedStyle().

Чтобы увидеть его в действии, добавьте этот скрипт в XHTML, как раз перед </body> тегом

<script> 
var boxes = document.body.children; 
console.log(window.getComputedStyle(boxes[0], null).getPropertyValue("color")); 
console.log(window.getComputedStyle(boxes[1], null).getPropertyValue("color")); 
</script> 

И проверить консольный вывод.

Рассказывать элемент, является ли встроенный или блок или другое значение дисплея, используйте window.getComputedStyle(element, null).getPropertyValue("display")

+0

Как установить такие значения? – JPM

+0

Через каскад. Создайте или измените объект таблицы стилей. – Alohci

+0

Ничего прямого, а? :-( – JPM