Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.08.2013, 18:15
Новичок на форуме
Отправить личное сообщение для divoannet Посмотреть профиль Найти все сообщения от divoannet
 
Регистрация: 13.08.2013
Сообщений: 3

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'у.

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

Буду благодарна за помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2013, 00:24
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

divoannet,
Приведите полный проблемный HTML и укажите теги - уборка который удаляет проблему
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2013, 02:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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

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

Последний раз редактировалось рони, 14.08.2013 в 02:11.
Ответить с цитированием
  #4 (permalink)  
Старый 14.08.2013, 13:42
Новичок на форуме
Отправить личное сообщение для divoannet Посмотреть профиль Найти все сообщения от divoannet
 
Регистрация: 13.08.2013
Сообщений: 3

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'ов с нужным классом, а скрипт в какой-то момент начинает считать, что его работа на этой странице окончена(
Ответить с цитированием
  #5 (permalink)  
Старый 14.08.2013, 14:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

divoannet,
я вам видимо плохо обьяснил причину сбоя --- ваш скрипт перестаёт работать на 10 строке по причине что в во втором диве у вас нет тега!!! [ava] что в этом случае происходит -- смотрите про бамбук -- нет в массиве никакого 1 индекса в этом случае
Ответить с цитированием
  #6 (permalink)  
Старый 14.08.2013, 14:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

divoannet,
мысли вслух ... строки 9 и 10 лишние строка 15 немного не на своём месте и можно укоротить ... и найти бы функцию mo и в неё вставить бы всё преобразование ...
Ответить с цитированием
  #7 (permalink)  
Старый 14.08.2013, 14:41
Новичок на форуме
Отправить личное сообщение для divoannet Посмотреть профиль Найти все сообщения от divoannet
 
Регистрация: 13.08.2013
Сообщений: 3

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

Как улучшить код - дело лавелапа, я буду стараться) это ж чуть ли не первый опыт.
Ответить с цитированием
  #8 (permalink)  
Старый 14.08.2013, 15:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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);

	});
});
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить загружены ли все картинки браузером Aderba jQuery 13 29.05.2014 14:18
Баги Opera пишем сюда devote Оффтопик 101 08.08.2013 05:56
.animate() - все просто но все такие не работает.. uExpo Общие вопросы Javascript 5 14.08.2011 01:52
... и все же, как прогнать в цикле? Ankh Ваши сайты и скрипты 12 21.07.2011 09:36
Селектор вида $('a[goBack]', someDiv) не находит элементов балерун jQuery 13 08.11.2010 18:27