Jquery选择父元素,has()并发症

时间:2012-03-23 22:46:59

标签: jquery drupal-7 selector

我在Drupal与Jquery合作。 我有四个块共享一个共同的标题,试图设置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版本太旧而无法支持on()

所以查询的前半部分工作正常,我可以选择四个块中的任何元素。 每个块都有许多元素,我想上升一个级别,找到包含每个块的父<li>,并隐藏它。

当我添加recordString时,我的查询停止工作。所有has()示例我只能按元素选择。

在上下文中有很多其他类和元素浮动,但基本上我需要根据它们是否包含'linkText'来选择元素,然后以某种方式将树向上移动到包装器li并隐藏它(并希望一切它包含)。

无法找到关于has()是否支持伪选择器以及所有这些的信息,无论如何它似乎开始变得复杂和令人困惑。绝对不能让代码运行。这只是错误的方式来完成这项工作吗?

谢谢,我感谢您的帮助

1 个答案:

答案 0 :(得分:0)

解决方案可能就像这样简单:

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