1. JavaScript / Говнокод #2918

    +163.4

    1. 1
    $(this).parents('li:first').parents('li:first').parents('li:first').parents('li:first').parents('li:first').attr('class', 'Node ExpandOpen IsLast');

    ну как прикажите до 8го элемента вверх по DOM прогуляться иначе? О_о
    ЗЫ период владение Jquery = 1 дьень и 24 часа из суток

    Запостил: lener, 02 Апреля 2010

    Комментарии (25) RSS

    • дать ему ид и обратится по ид?
      обратится к его контейнеру через 1 парент?
      Ответить
      • ID увы уже используется для других немаловажных целей .. и еще, структура ооочень большая и сложная, так что даже внутренний div принесет погибель для всего велисопеда .. возможно снизайдет хорошая мысль на выходных ..
        Ответить
    • Меня терзают смутные сомнения насчет класса "IsLast".
      Тогда может было бы лучше $(this).parents('li:last')?
      Ответить
      • чтото кажись похожее на то что действительно неоходимо .. ) первый уровень прошел .. буду пробовать дальше ))
        Ответить
    • Курим маны...

      <html>
      <head>
      <script>$(document).ready(function(){
      //READY START
      
      var parentEls=$('b').
        parents().
        map(function(i){
          return this.tagName+'#'+i;
        }).
        get().
        join(', ');
      
      $('b').append(' :: <strong>'+ parentEls+ '</strong>');
      
      //READY END
      });
      </script>
      </head>
      
      <body>
      <div><p><span><span><span><b>OBJECT</b></span></span></span></p></div>
      </body>
      </html>


      http://api.jquery.com/parents/
      http://api.jquery.com/map/
      Ответить
    • Мне одному пришло в голову
      $(this).parents('li:eq(7)')
      ?
      Ответить
    • показать все, что скрытону и где здесь с++?
      Ответить
    • lener запостил мой говнокод :)
      всем спсб за помощь.. в релизе сделал так:

      qci = 'Node ExpandClosed IsLast';
      qc = 'Node ExpandClosed';
      qoi = 'Node ExpandOpen IsLast';
      qo = 'Node ExpandOpen';
      for (i=0; i < 9; i++){
      qobj = $(this).parents('li:eq('+i+')');
      if (qobj.attr('class') == qci) qobj.attr('class', qoi);
      if (qobj.attr('class') == qc) qobj.attr('class', qo);
      }
      Ответить
      • Теперь твой код воняет так, что аж глаза режет.
        Ответить
        • Наконец-то появился сайт, где "срать в комментах" - это нормально :)
          Ответить
      • Ну и чудо))) Так вам нужен каждый родитель?
        1) Создайте css-правило для open и сделайте его более конкретным, например
        .expand {text-decoration:underline;}
        .expand.open {text-decoration:none;}

        2) воспользуйтесь slice
        $(this).parents('li').slice(0,9).addClass('open');

        если нужны ВСЕ родители, слайс не надо делать
        К.О.

        Ответить
        • Нет, нужен не каждый родитель. Приведенный код - далеко не полный. Поэтому вопрос был именно в том "как до 8го элемента вверх по DOM прогуляться" и он был успешно успешно решен анонимом в комменте http://govnokod.ru/2918#comment19546 но все равно спасибо за ваше сообщение(про slice интересный вариант) хоть и немного уже не в тему ;)
          Ответить
          • Если вам хочется подниматься по одной ступеньке, зачем каждый раз дергать всю лестницу?
            var $list = $(this).parents('li'), $li, i=0;
            while (i<9){
            $li = $list.eq(i);
            //..do some with $li...
            // ..m.b. break..
            i++;
            }
            Ответить
          • Вы будете удивлены, но в jQ есть еще и селекторы gt и lt, которые как раз Вам нужны.
            $(this).parents('li:lt(7)').addClass('open');
            Ответить
    • показать все, что скрытоНу и говнище этот ваш jquery
      Ответить
    • c = document.getElementById(id), i = 8; while (i--) c = c.parentNode;
      Ответить
      • И неплохо бы прикрутить проверку на существование узла.
        Ответить

    Добавить комментарий