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'у. Но не могу понять ни в чём, собственно, беда, ни как обойти или сделать умнее. Буду благодарна за помощь. |
divoannet,
Приведите полный проблемный HTML и укажите теги - уборка который удаляет проблему |
divoannet,
1 проверить есть ли в строке тег [ava] 2 если есть выделить содержимое 3 если есть содержимое присвоить картинке. делить строку с плеча нерекомендуется var str = "12345"; var arr = str.split('[ava]'); alert(arr); var ava = arr[1]; alert(ava);//тут скрипт невыдерживает и уходит курить бамбук |
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> Отправлено: Вчера 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="">Спасибо: 0</a> <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'ов с нужным классом, а скрипт в какой-то момент начинает считать, что его работа на этой странице окончена( |
divoannet,
я вам видимо плохо обьяснил причину сбоя --- ваш скрипт перестаёт работать на 10 строке по причине что в во втором диве у вас нет тега!!! [ava] что в этом случае происходит -- смотрите про бамбук -- нет в массиве никакого 1 индекса в этом случае |
divoannet,
мысли вслух ... строки 9 и 10 лишние строка 15 немного не на своём месте и можно укоротить ... и найти бы функцию mo и в неё вставить бы всё преобразование ... :write: |
рони, ух ты... признаю, ошибка глупейшая, спасибо)) я оставлю отпечаток от фейспалма на память.
Как улучшить код - дело лавелапа, я буду стараться) это ж чуть ли не первый опыт. |
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. |