Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   find() находит не всё (https://javascript.ru/forum/jquery/40639-find-nakhodit-ne-vsjo.html)

divoannet 13.08.2013 18:15

find() находит не всё
 
Добрый день, господа, позвольте озадачить вопросом.

На этом форуме я пытаюсь написать скрипт, который бы брал картинку из бб-тега [ava] и соответственно менял аватар автора сообщения.
Само сообщение - это div с class="font1", у остальных элементов уникальных классов нет, потому приходится извращаться с прогулками по дереву тегов.

$(document).ready( function() {

	$('.font5').parent().parent().addClass('forum-main');
	
	$('div.font1').each(function() {

		var str = $(this).html();

		var arr = str.split('[ava]');
		var ava = arr[1].split('[/ava]');
		str = str.replace('[ava]' + ava[0] + '[/ava]','');
		$(this).html(str);
		
		
		$(this).parent().parent().children('td').first().children('table').children('tbody').children('tr').first().next().children('td').children('div.font2').children('img').last().attr('src',ava[0]);

	});
});


И всё работает ровно до момента, пока у автора темы нет ссылки в подписи. Стоит создать тему, имея подпись, и скрипт находит и правит только первый пост. Проверила по alert'у.

Но не могу понять ни в чём, собственно, беда, ни как обойти или сделать умнее.

Буду благодарна за помощь.

Deff 14.08.2013 00:24

divoannet,
Приведите полный проблемный HTML и укажите теги - уборка который удаляет проблему

рони 14.08.2013 02:09

divoannet,
1 проверить есть ли в строке тег [ava]
2 если есть выделить содержимое
3 если есть содержимое присвоить картинке.
делить строку с плеча нерекомендуется

var str = "12345";
   var arr = str.split('[ava]'); alert(arr);
   var ava = arr[1];  alert(ava);//тут скрипт невыдерживает и уходит курить бамбук

divoannet 14.08.2013 13:42

Deff, в том дело, что удаление подписи не приводит к решению проблемы, и это меня дезориентирует. Собственно, в представленной теме подпись я удалила изо всех сообщений, но это не помогло.

<td valign="top">
        <div class="font2"><a href="/?1-6-0-00000006-000-0-0#000" name="000"><img src="/gif/img/p.gif" border="0" width="12" height="9" alt="ссылка на сообщение"></a>&nbsp;Отправлено: Вчера&nbsp;16:07. Заголовок: Ещё раз</div>
        <hr size="1" color="">

<!-- Вот этот div, в котором содержится само сообщение //-->
        <div class="font1"><br> <br>  <img border="0" src="http://jpe.ru/gif/smk/sm31.gif"> <br><br></div>

<!-- А отсюда начинается подпись, которая, как мне кажется, и портит всё //-->
        <iframe name="spasibo" width="0" height="0" style="display:none"></iframe>
        <form action="/" method="POST" target="spasibo">
            <input type="hidden" name="parol" value="дjyгфощhг2рxгтлiгжг1шmрzяоgzгmлkябhlяjэwяоьkябяiфэде">
            <table width="100%" cellpadding="0" cellspacing="0" border="0">
                <tbody>
                    <tr class="font2" valign="bottom">
                        <td><i></i></td>
                        <td align="right"><a href="#msgid_t" alt="" title="">Спасибо:&nbsp;0</a>&nbsp;<input type="Hidden" name="work" value="42"><input type="Hidden" name="razdel" value="6"><input type="Hidden" name="msgid" value="000"><input type="Hidden" name="filenumber" value="00000006"><input type="Hidden" name="addspasibofromuser" value="Admin"></td>
                    </tr>
                </tbody>
            </table>
        </form>

Тут скрипт делает что должно, а в следующем tr уже нет

Это всё страшный бесплатный сервис, внутри ничего без скриптов не поменять, но задачу нужно решить именно для него.

рони, дельный совет, спасибо. Но прежде, чем его применить, мне всё равно как-то нужно вытащить со страницы массив всех div'ов с нужным классом, а скрипт в какой-то момент начинает считать, что его работа на этой странице окончена(

рони 14.08.2013 14:10

divoannet,
я вам видимо плохо обьяснил причину сбоя --- ваш скрипт перестаёт работать на 10 строке по причине что в во втором диве у вас нет тега!!! [ava] что в этом случае происходит -- смотрите про бамбук -- нет в массиве никакого 1 индекса в этом случае

рони 14.08.2013 14:18

divoannet,
мысли вслух ... строки 9 и 10 лишние строка 15 немного не на своём месте и можно укоротить ... и найти бы функцию mo и в неё вставить бы всё преобразование ... :write:

divoannet 14.08.2013 14:41

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

Как улучшить код - дело лавелапа, я буду стараться) это ж чуть ли не первый опыт.

рони 14.08.2013 15:52

divoannet,
Вариант ...
$(document).ready( function() {

	$('.font5').parent().parent().addClass('forum-main');

	$('div.font1').each(function(indx,el) {

		var str = $(el).html();
		str = str.replace(/\[ava\](.*?)\[\/ava\]/,function (a, b)
{
      
    /\.(jpg|png|gif)$/.test(b)  &&  $('div.font2 img:last',$(el).parent().prev()).attr('src',b);

    return ''
});
		$(this).html(str);

	});
});


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