2013-09-13 3 views
3

У меня есть элемент <style>, который применяет некоторые глобальные стили, такие как A { color: red }, в отличие от моей таблицы стилей, которые стили A { color: green } (в качестве примера).Применить <style> правила к другому элементу вместо

Как изменить весь стиль в моем элементе <style> так, чтобы он содержался и применяется только к стилю для дочерних элементов родительского элемента, который я указываю.

A { color: red } становится #myelem A { color: red }

.myclass { display: none; } становится #myelem .myclass { display: none }

бы я должен найти <style> элемент, разобрать содержимое, заменить каждый селектор затем обновить содержимое элемента с его фиксированным?

Есть ли альтернатива изменению содержимого моего элемента <style>?

Почему я это делаю? У меня есть HTML, который хранится в базе данных, которую я хочу редактировать (это CMS). HTML может содержать <style> элементов, и я не могу доверять тому, кто пишет CSS, чтобы записать его в область видимости. Я мог бы запретить пользователям использовать элемент <style>, но я бы предпочел. У меня нет контроля над оригинальным CSS. Только то, что я верну в свой сервер/клиентский код.

Если все остальное терпит неудачу, я мог бы загрузить его в плавающий фрейм ... :(


Ооооий Firefox поддерживает не <style scoped>, который относится только к родителю, где <style> элемента находится в DOM. Жаль, что не поддерживается в любом другом браузере :(

+0

Делая это в JavaScript, не имеет смысла. В любом случае, ваш CSS должен быть написан для определения области видимости. Я имею в виду, сколько CSS может быть, что вы не можете сделать это вручную? – CodingIntrigue

+1

Добавлено объяснение. Контекст не должен иметь большого значения. – Jared

+0

Обновление моей ситуации: я решил отказаться от редактируемого решения для iRrame. Иногда вам просто нужно признать поражение и пойти с тем, что лучше всего работает над тем, что более семантично. – Jared

ответ

-1

Используйте child селектор:.

#yourElement > a { color: green; } 
+0

У меня нет контроля над CSS, если я не изменю его после того, как он был предоставлен мне. – Jared

2

Как уже упоминалось, у ожно использовать:

<style scoped> 
... 
</style> 

Хотя только изначально поддерживается в Firefox, вы можете использовать эту JQuery polyfill, чтобы заставить его работать в других браузерах.

+0

Я изучал полиполк jQuery перед тем, как прочитать ваше предложение. :) Благодаря. – Jared

+1

Несмотря на мои первоначальные оговорки, это очень хороший вопрос и что-то, о чем я никогда не думал во время моего развития CMS, который пригодился бы! – CodingIntrigue

+0

Это также для моего редактора CMS. :) – Jared

-1

JQuery:

$("parent_type > children_type").css("param","value"); 

пример

$("#myid > div").css("display","none"); 

here «s ссылку

JSFiddle

+0

Это не имеет никакого отношения к тому, что я прошу. – Jared

+0

Напротив, он делает то, что должен делать, поэтому я не знаю, почему вы голосуете. –

+0

В вашем примере не будет применяться исходный CSS? Ваше предложение вручную изменить CSS для каждой отдельной строки? – Jared

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