Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Помогите с перебором массива (https://javascript.ru/forum/jquery/38222-pomogite-s-pereborom-massiva.html)

qaim 23.05.2013 22:28

Помогите с перебором массива
 
$(function(){
    var arr = [ "A", "B", "C" ];
    $.each(arr, function() {
var apl = this;
	$("pre:contains('" + apl + "')").each(function(){
		var re = new RegExp(apl,"gim");
        $(this).html($(this).text().replace(re, "<span style=\"color:red\">" + apl + "</span>"));
        
});
     });

Почему-то происходит замена только по последнему элементу в массиве.
А нужно что бы по всем элементам происходила замена.

nyols 23.05.2013 23:32

метод .text() - возвращает содержимое без тегов.

И получается что:
1) Получили содержимое в виде текста, обернули A в span
2) Получили содержимое в виде текста (А уже без span'a), обернули B в span
3) Получили содержимое в виде текста (А и B уже без span'a), обернули C в span

Так что, вместо
$(this).text().replace
надо
$(this).html().replace

qaim 24.05.2013 00:20

Цитата:

Сообщение от nyols (Сообщение 252443)
метод .text() - возвращает содержимое без тегов.

И получается что:
1) Получили содержимое в виде текста, обернули A в span
2) Получили содержимое в виде текста (А уже без span'a), обернули B в span
3) Получили содержимое в виде текста (А и B уже без span'a), обернули C в span

Так что, вместо
$(this).text().replace
надо
$(this).html().replace

Премного благодарен!!!
Всё работает!
JS совсем не мой конек, потому не очень просто с ним работать...

Подскажите ещё, если не сложно, как быть с ненужными паттернами?
Вот к примеру:

Есть массив: А, А1, В, В1
Скрипт находит и оборачивает А1 в тексте дважды.
Как этого можно избежать? ...или запретить проход по уже обернутым поисковым фразам.

qaim 24.05.2013 00:29

Что бы понятней было, наверно, проще показать, что я пытаюсь сделать...
Аккорды
Задача у меня не очень сложная, но со своими камнями.
Хочу обернуть аккорды другой разметкой и аяксом подгружать аппликатуры...
С аяксом проблем не будет, а вот с правильным парсингом голову приходится поломать, так как есть тексты и на английском...

qaim 24.05.2013 00:34

На php в общем-то больших проблем не вижу как это реализовать, но хотелось бы поменьше грузить сервер, потому решил переложить на клиента это дело...

Kvark 30.05.2013 16:31

а почему не через функцию .wrap?

А чтобы два раза не обворачивал добавь проверку: А не обернут ли уже?

ANAGAMA 30.05.2013 17:06

ЧТо бы я делал.

Добавить к div id <div class="song_txt" id="song">

Считать весь этот div в строку s= $('#song').html();

Использовать s=s.replace(/(Em)/gm,'<span ...>$1</span>');

не забудьте модификатор m.

Вывести строку взад $('#song').html(s);


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