Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 16.06.2013, 23:57
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

function queryStyleRule(selector) {
    var sheets = document.styleSheets,
        j, i = sheets.length,
        rules = [];
    for( ;i--; ) {
        try {
            rules = sheets[i].cssRules ? sheets[i].cssRules : sheets[i].rules ? sheets[i].rules : [];
        } catch(_e_) {
            rules = [];
        }
        for(j = rules.length; j--; ) {
            var sel = rules[j].selectorText.replace(/(^|[^:]):(after|before)/i, '$1::$2');
            if (sel.toLowerCase() === selector) {
                return rules[j];
            }
        }
    }
    var style = document.documentElement.firstChild.appendChild(document.createElement('style'));
    try {
        selector = selector.replace(/::(after|before)/, ':$1');
        if (style.sheet) {
            style.sheet.insertRule(selector + '{}', 0);
            return style.sheet.cssRules[0];
        } else if (style.styleSheet) {
            style.styleSheet.addRule(selector, ' ', 0);
            return style.styleSheet.rules[0];
        }
    } catch(_e_) {
        style.parentNode.removeChild(style);
    }
    return null;
}


queryStyleRule('body::after').style.content = '"Hello World!"';;

alert(queryStyleRule('body::after').style.content);
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 17.06.2013 в 04:41.
Ответить с цитированием
  #12 (permalink)  
Старый 17.06.2013, 00:05
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

<style>
    div:after {
        content: 'Этот текст будем получать с помощью метода queryStyleRule';
    }
</style>
<div>Во как! </div>
<input type="button" onclick="queryStyleRule('div::after').style.content='\'Вот мы его и заменили)))\'';" value="Заменить текст" />
<script>
function queryStyleRule(selector) {
    var sheets = document.styleSheets,
        j, i = sheets.length,
        rules = [];
    for( ;i--; ) {
        try {
            rules = sheets[i].cssRules ? sheets[i].cssRules : sheets[i].rules ? sheets[i].rules : [];
        } catch(_e_) {
            rules = [];
        }
        for(j = rules.length; j--; ) {
            var sel = rules[j].selectorText.replace(/(^|[^:]):(after|before)/i, '$1::$2');
            if (sel.toLowerCase() === selector) {
                return rules[j];
            }
        }
    }
    var style = document.documentElement.firstChild.appendChild(document.createElement('style'));
    try {
        selector = selector.replace(/::(after|before)/, ':$1');
        if (style.sheet) {
            style.sheet.insertRule(selector + '{}', 0);
            return style.sheet.cssRules[0];
        } else if (style.styleSheet) {
            style.styleSheet.addRule(selector, ' ', 0);
            return style.styleSheet.rules[0];
        }
    } catch(_e_) {
        style.parentNode.removeChild(style);
    }
    return null;
}

alert('Текущий текст у псевдо-элемента: ' + queryStyleRule('div::after').style.content);
</script>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 17.06.2013 в 04:41.
Ответить с цитированием
  #13 (permalink)  
Старый 17.06.2013, 01:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

devote,
Ответить с цитированием
  #14 (permalink)  
Старый 17.06.2013, 04:08
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Мой вариант, без поиска существующих правил, исправленный:
<script>
var addRule =  (function(){
    var head = document.head || document.getElementsByTagName('head')[0];
    var style = head.appendChild(document.createElement('style'));
    var styleSheet = style.sheet || style.styleSheet;
    var cssRules = styleSheet.cssRules || styleSheet.rules;

    return function(selector) {
        if (styleSheet.insertRule) {
            styleSheet.insertRule(selector + '{}', cssRules.length);
        } else {
            styleSheet.addRule(selector, ' ', cssRules.length);
        }
        return cssRules[cssRules.length - 1];
    }
})();
    
var pseudoRule = addRule('span:before');
var setPseudoContent = function(content) {
    pseudoRule.style.content = '"' + content + '"';
}
</script>
<input onkeyup="setPseudoContent(value)" />
Pseudo:<span></span>


Проверено в Opera, Firefox, Google Chrome, IE8, IE10.

Сообщение от devote
addRule(selector, 'e:0;', 0);
Вот тут вроде бы достаточно пробел передать в качестве второго аргумента.

Последний раз редактировалось danik.js, 17.06.2013 в 06:11.
Ответить с цитированием
  #15 (permalink)  
Старый 17.06.2013, 04:41
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от danik.js
Вот тут вроде бы достаточно пробел передать в качестве второго аргумента.
ну да, верно говоришь.. подправил свой код
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #16 (permalink)  
Старый 17.06.2013, 04:48
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от danik.js
// почему-то style.content не работает в хроме.
любопытно почему у тебя не работает... у меня все гуд.. Может ты пытаешься назначить свойству просто значение вида:
style.content = 'ololo';

хотя по правилам нужно:
style.content = '"ololo"';
// или
style.content = 'attr(data-my-attr)';
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #17 (permalink)  
Старый 17.06.2013, 04:55
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

кстати о птичках.. а нафига такой хренью заниматься, если можно все упростить))

Для ИЕ8 обязательно должен присутствовать у спана атрибут, иначе ИЕ8 не будет обновлять значение
<style>
    span:before {
        content: attr(data-before-content);
    }
</style>
<input onkeyup="document.getElementById('spanId').setAttribute('data-before-content', this.value)" />
Pseudo:<span id="spanId" data-before-content="Начальное значение псевдо-элемента, может быть пустым значением"></span>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 17.06.2013 в 05:09.
Ответить с цитированием
  #18 (permalink)  
Старый 17.06.2013, 06:14
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от devote
любопытно почему у тебя не работает... у меня все гуд.. Может ты пытаешься назначить свойству просто значение вида..
Я - лох ((
Сообщение от devote
нафига такой хренью заниматься, если можно все упростить
Блин, реально круто )

Кстати, как заэкранировать кавычку? В моем варианте текст с двойной кавычкой не проходит..
Ответить с цитированием
  #19 (permalink)  
Старый 17.06.2013, 10:11
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от danik.js
Кстати, как заэкранировать кавычку? В моем варианте текст с двойной кавычкой не проходит..
просто использовать &quot;
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #20 (permalink)  
Старый 17.06.2013, 10:31
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от danik.js
Кстати, как заэкранировать кавычку? В моем варианте текст с двойной кавычкой не проходит..
И еще у меня прокатывает такой вариант:
style.content = JSON.stingify('Мой текст в "Кавычках" и \'одинарных\' тоже');
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задать hover для элемента bushstas Элементы интерфейса 43 28.11.2019 14:39
как для File.openDialog задать папку Averin500 Events/DOM/Window 2 06.01.2013 00:40
Новая система управления сайтом Scripto CMS deepslam Ваши сайты и скрипты 38 31.01.2011 14:55
Задать атрибуты option для select KonstantinK Элементы интерфейса 2 22.12.2010 13:39