Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   ие78 и регулярные выражения (https://javascript.ru/forum/css-html-internet-explorer/39507-ie78-i-regulyarnye-vyrazheniya.html)

alexandr2006 02.07.2013 17:49

ие78 и регулярные выражения
 
<!DOCTYPE HTML>
<html>
 <head>
  <title> New Document </title>
 </head>
 
 <body>
 
<div id="rub0_133165" class="small readed" style="height: 323px;">
 
            
            <h1>
                <a class="view_full" href="/news/133165-tragediya-v-seme-dzheymsa-bonda-pirs-brosnan-poteryal-priemnuyu-doch">Трагедия в семье "Джеймса Бонда": Пирс Броснан потерял приемную дочь</a>  
                <a target="_blank" class="source_news" href="http://http://www.newsru.com">NEWSru.com</a>,  
                сегодня в 10:19            </h1>
 
            <p>41-летняя Шарлотта скончалась от рака яичников - болезни, ранее убившей ее мать и бабушку. Мать Шарлотты, австралийская актриса Кассандра Харрис вышла замуж за Пирса Броснана в 1980 году, имея двоих детей от предыдущего брака - Шарлотту и Кристофера. Вскоре Броснан усыновил детей своей возлюбленной.</p>
        </div>
 
 <script>
 var str=document.getElementById("rub0_133165").innerHTML;
alert('<article>'+str.replace(/<a[^>]*?class="view_full".*?>(.*?)<\/a>/g,'<span>$1</span>').replace(/<a [^>]*?class="source_news".*?>(.*?)<\/a>/,'<span>$1</span>')+'</article>');
  </script>
 </body>
</html>




А именно: хочу взять то, что внутри тега div и вывести на экран заменив ссылки тегом span. Работает везде, кроме ие 7-8.

В чем косяк?

danik.js 02.07.2013 18:18

1) Берешь элемент div.
2) Клонируешь через cloneNode(true)
3) Обходишь ссылки, заменяешь их спанами через replaceChild
4) Выводишь innerHTML

И никаких регулярок )
(стоит отметить что код получится медленней чем на регулярках, но если у нас не цикл - повода беспокоиться нет)

Deff 02.07.2013 19:38

В ИЕ теги HTML типично считываются без кавчек в Атрибутах и сами теги большими буквами, т.е в регулярке нужно кавычки ставить по вопросом "? и переводить к единому регистру /i

danik.js 02.07.2013 19:55

<!DOCTYPE html>
<div id="rub0_133165" class="small readed" style="height: 323px;">
    <h1>
        <a class="view_full" href="/news/133165-tragediya-v-seme-dzheymsa-bonda-pirs-brosnan-poteryal-priemnuyu-doch">Трагедия в семье "Джеймса Бонда": Пирс Броснан потерял приемную дочь</a> 
        <a target="_blank" class="source_news" href="http://http://www.newsru.com">NEWSru.com</a>, 
        сегодня в 10:19            </h1>

    <p>41-летняя Шарлотта скончалась от рака яичников - болезни, ранее убившей ее мать и бабушку. Мать Шарлотты, австралийская актриса Кассандра Харрис вышла замуж за Пирса Броснана в 1980 году, имея двоих детей от предыдущего брака - Шарлотту и Кристофера. Вскоре Броснан усыновил детей своей возлюбленной.</p>
</div>
  
<script>
var source = document.getElementById("rub0_133165");

var clone = source.cloneNode(true);

var links = clone.querySelectorAll('a');
for (var i = 0, link; link = links[i]; i++) {
    var span = document.createElement('span');
    span.innerHTML = link.innerHTML;
    link.parentNode.replaceChild(span, link);
}
alert('<article>' + clone.innerHTML + '</article>');
</script>

рони 02.07.2013 20:19

Цитата:

Сообщение от alexandr2006
В чем косяк?

может алерт заблокирован? если алерт работает тогда версия Deff,

рони 02.07.2013 20:24

danik.js,
link = links[i] ??
может link = links[0] или обратный счёт с конца links

danik.js 02.07.2013 21:44

рони, да, ты прав. Поправил код. Только иначе.


Часовой пояс GMT +3, время: 09:08.