Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Война с иерархией элементов DOM в jQuery
 
 автор: asptema   (22.11.2009 в 04:34)   письмо автору
 
 

в общем, сижу ковыряю ДОМ. Все основные постулаты более или менее понятны. Иерархия тоже ясна, не совсем ясно как по ней можно пройтись из jQuery. Вот для примера такой кусок дерева:

    <ul>
      <li><div class="com">Tragedies</div>
        <ul>
          <li><a href="hamlet.pdf">Hamlet</a></li>
          <li>Macbeth</li>
          <li>Romeo and Juliet</li>
        </ul>
      </li>
      <li><div class="com">Histories</div>
        <ul>
          <li>Henry IV (<a href="mailto:henryiv@king.co.uk">email</a>)
             <ul>
               <li>Part I</li>
               <li>Part II</li>
               <li>Part III</li>
               <li>Part IV</li>
             </ul>
          <li><a href="http://www.shakespeare.co.uk/henryv.htm">Henry V</a></li>
          <li>Richard II</li>
        </ul>
      </li>
    </ul>

далее на jQuery пишу нечто типа этого:

$(document).ready(function() {
  $('li:contains(Part)').siblings().addClass('highlight');
});

я хочу, чтобы элементы списка, содержащие заданный текст (в данном случае "Part") выделялись определенным классом.
уже перебрал все шо мог: next(), nextAll(), children(), parent(), prev(), prevAll().
Блин, уже не знаю как можно выделить только то, что надо.
В результат попадают либо лишние элементы, либо вообще ничего :(
Лишние классы вешать на <li> не буду - слишком жирно будет. Этих ЛИшек могут быть десятки

  Ответить  
 
 автор: sim5   (22.11.2009 в 04:40)   письмо автору
 
   для: asptema   (22.11.2009 в 04:34)
 

Вообще-то правильно пишется так:
$("li:contains('Part')")

  Ответить  
 
 автор: asptema   (22.11.2009 в 04:48)   письмо автору
 
   для: sim5   (22.11.2009 в 04:40)
 

так может быть и правильнее, но смысл от этого не изменился. самый близкий рабочий вариант:

$(document).ready(function() {
  $("li:contains('Part')").next().addClass('highlight');
});

вот только при этом выделение "съезжает" на одно вперед по дереву DOM.
Если кто не понял - нужно выбрать все элементы на одном уровне, не более того.

  Ответить  
 
 автор: sim5   (22.11.2009 в 05:35)   письмо автору
 
   для: asptema   (22.11.2009 в 04:48)
 

alert($("li:contains('Part')").size()) равно 6, то есть вся ветвь элементов li в которых есть текст Part.
next(), значит взять следующее, поэтому и "съезжает", а вам надо что выделить?
Если иерархия ветви вашей постоянна, то:
$("li>ul>li>ul>li:contains('Part')").size() будет равна искомому (4):
$("li>ul>li>ul>li:contains('Part')").wrap("<b></b>");

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования