Jquery выбрать родительский элемент, имеет () сложности - PullRequest
1 голос
/ 24 марта 2012

Я работаю с Jquery в Drupal. У меня есть наборы из четырех блоков, которые имеют общий заголовок, пытаясь настроить Jquery, чтобы скрывать второй, третий и четвертый блоки при нажатии на первый.

Вот код:

JavaScript:

(function($){
  $('.view-display-id-block_1').delegate('a','hover',function(){
    var linkText = $(this).text();
    var viewSelectString= '.views-field-title:contains('+linkText+')';
    var textSelect = $('p,li,a,span',$(viewSelectString));
    var recordString = 'div.views-field-title:contains('+linkText+')';
    var recordStringRefine = 'li .views-row:has('+recordString+')';
    var recordStringSelect = $(recordStringRefine);
    $recordStringSelect.hide();
  });
})(jQuery);

HTML:

<li><p class='views-field-title'>contains linkText</p><p></p><p></p></li>
<li><p class='views-field-title'>contains linkText</p><p></p><p></p></li>
<li><p class='views-field-title'>contains linkText</p><p></p><p></p></li>
<li><p class='views-field-title'>contains linkText</p><p></p><p></p></li>

Использование delegate(), поскольку версия jQuery слишком старая для поддержки ()

Итак, первая половина запроса работает нормально, я могу выбрать любой элемент в четырех блоках. В каждом блоке есть несколько элементов, я хочу подняться на уровень, найти родителя <li>, который содержит каждый блок, и скрыть это.

Когда я добавляю запись recordString, мой запрос перестает работать. Все примеры has () я могу найти только по элементам.

В контексте существует множество других классов и элементов, но в основном мне нужно выбирать элементы на основе того, включают ли они 'linkText', затем каким-то образом перемещаться по дереву к оболочке li и скрывать это (и, надеюсь, все что он содержит).

Не могу найти много информации о том, поддерживает ли has () псевдо-селекторы и все такое, в любом случае кажется, что это начинает становиться несколько сложным и запутанным. Определенно не могу заставить код работать. Это просто неправильный способ сделать это?

Спасибо, я ценю помощь

1 Ответ

0 голосов
/ 24 марта 2012

Решение может быть таким простым:

$(function(){
    $('.view-display-id-block_1').delegate('a', 'hover', function(){
        $(".views-field-title:contains(" + $(this).text() + ")").closest('li').hide();
    });
});
...