Xpath за IE??

afsh

Registered
Здравейте,

Блъскам си главата тука с един код и не мога да намеря решение. Има ли начин това да проработи под IE:
Код:
<html>
<head>
    <style type="text/css" />
        .st {color: blue;}
    </style>
</head>

<body>
    <div>Text one</div>
    <div>Text two</div>
    <script>
        var result = document.evaluate("//div", documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
        result.singleNodeValue.className="st";
    </script>
</body>
</html>

Пробвах с html-xpath, но не постигнах особен успех. освен, че успявам да извличам лесно информация. Не мога да го накарам да ползва намеренoто като обект, на който да приложи атрибут "class".
Естествено под FF, Opera, Chrome и останалите истински браузъри всичко си е Ок.

Предварително благодаря за идеите!
 
Може би проблема не е в браузъра, а в стиловете. Пробвай с този синтаксис:

[css].st {color: blue!important;}[/css]
 
css-а няма общо с парсера. Става въпрос за обекти на документа, а не за стилизиране.
Иначе благодаря за идеята!
 
Можеш ли да кажеш какво точно прави този XPath. Срещал съм го като понятие в интернет, но не съм се интересувал много много.
Като гледам кода, предполагам, че това селектира всички div елементи на страницата и им добавя атрибут class със стойност "st".
Ако е така, следният джаваскрипт би ти свършил работа
[js]window.onload = function () {
var divs = document.getElementsByTagName('div'); // Взимаме всички DIV елементи
divs.className = 'st'; // Задаваме стойността на class
};[/js]
 
F1r3Fl3x каза:
Можеш ли да кажеш какво точно прави този XPath.
...
Като гледам кода, предполагам, че това селектира всички div елементи на страницата и им добавя атрибут class със стойност "st".

Благодаря за кода! Ползвам подобни JavaScript заменки за IE, но е доста осакатено от към функционалност и иска много безсмислено писане.
XPath в най-общи линии е език, който приема XML-код за база данни от която можеш да селектираш определени елементи според някакъв критерий. Друг подобен език е XQuery, но той е с още по-слаба поддръжка в браузърите. С няколко реда на XPath можеш да източиш само конкретни полета от цял сайт директно в SQL-база данни (web scraping).

По горния ми скрипт не селектира всички div елементи, а само първия, който съвпада с критерия. Ето и някои други примери:
//a[contains(@href,'cat')]/@href - това ще извлече от някоя страница всички линкове, който в адреса съдържат стринга 'cat'
//div[@class="sydyrjanie"] - това query ще извлече само текста на div елементи с атрибут class="sydyrjanie"

Може да се задава и кой точно елемент да извлече и какво точно, дали съдържанието, дали името на някой атрибут или линк и т.н.

Необходимо ми е за да не цапам PHP-кода с проверка за текуща страница и маркиране на бутони от менютата. Примерно при едно такова меню:
Код:
<ul class="menu">
<li><a>Edno</a></li>
<li><a>Dve</a></li>
<li><a>Tri</a></li>
<li><a>Chetiri</a></li>
</ul>

Ако текущата ми страница е Dve, мога лесно през javaScript да задам клас на втория линк с //ul[@class='menu']/li[2]. Ето така ще изглежда кода (примерно, може и по още няколко начина с XPath) за FF, Opera, Chrome:
Код:
<html>
<head>
    <style type="text/css" />
        .st {color: blue;}
    </style>
</head>

<body>
<ul class="menu">
<li><a>Edno</a></li>
<li><a>Dve</a></li>
<li><a>Tri</a></li>
<li><a>Chetiri</a></li>
</ul>
    <script>
        var result = document.evaluate("//ul[@class='menu']/li[2]", document.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
        result.singleNodeValue.className="st";
    </script>
</body>
</html>
Супер простичко и изцяло клиент-сайд. Не е само това. Имам и още няколко идеи, където бих могъл да ползвам XPath, без да се счупя от писане на JavaScript. Но пустото IE вечно прецаква добрите идеи! :(
 
Аха, ясно. Така и предполагах :)
Амии разбира се, че IE ще ти прави проблеми, ако не правеше проблем щях да се учудя... :D
Аз обикновено използвам jQuery в проектите си, но понякога не ми е нужна цялата библиотека, а взимам само selector engine-а.
http://sizzlejs.com/ <- това захранва jQuery :)

Сваляш си архивчето и го минифайлваш в http://refresh-sf.com/yui/
или с yuicompressor на компа :)

Много лесно и удобно се работи с него. Документацията е прилична и предполагам ще се оправиш :)
 

Back
Горе