Drupal 7 + jQuery,如何让 jQuery 只与活动节点交互(通过 nid)而不是列表中的每个节点

Posted

技术标签:

【中文标题】Drupal 7 + jQuery,如何让 jQuery 只与活动节点交互(通过 nid)而不是列表中的每个节点【英文标题】:Drupal 7 + jQuery, how to get jQuery to interact only with the active node (via nid) and not every node in the list 【发布时间】:2012-10-24 16:42:07 【问题描述】:

我一直在寻找很长一段时间没有任何运气的主题,如果我错过了一个较旧的线程,请指出正确的方向。

我想要达到的目标:

拥有多个节点的常规视图并通过在节点内按下按钮(或其他任何东西)使 jQuery 以任何方式与该特定节点交互。前任。使隐藏的 div 出现。

我面临的问题对于初学者来说,我仍然发现很难将 jQuery 与 D7 一起使用。我之前使用 jQ 已经很长时间了,但是当它与 D7 一起使用时,我遇到了很大的问题。

最大的问题 ...是一旦我让 jQ 工作,它会影响列表/提要中的每个可见节点,因为我通过 div id 或类调用函数。我理解为什么会发生这种情况,但我不知道如何让 jQ 仅对按下按钮的节点产生影响。

这是迄今为止我在节点模板中针对特定内容类型所拥有的内容:

    <script type="text/javascript">                                         
(function ($) 

 $('.up2').click(function () 
        $('.nummer_dark').text(parseInt($('.nummer_dark').text())+1,0).toFixed(2);
   $('.up2').toggle();


      );

       $('.up').one('click', function() 
        $('.flag-link-toggle').click();once();


      );


)(jQuery);

 </script> 

这只是一个示例,我试图通过按下具有 up2-class 的对象来增加跨度内的数字,并通过按下具有 up-class 的对象来切换标志。

第一个代码有效,但数字增加了小数(2.453、3.4123 等),而不是我计划的 1、2、3、4。但主要问题是这两个代码都对列表中的每个节点产生影响。我知道这是因为列表中的每个节点都具有相同的节点模板,因此具有相同的类,但是 我想找到一个在 jQ 中使用 node-id 的解决方案。

任何领先的答案都会拯救我的一天! =)

【问题讨论】:

【参考方案1】:

我会使用.closest().find() 方法。这将允许您仅定位包含刚刚单击的按钮的父节点,以便您可以仅查找和更改该节点的子元素。这是一些快速的伪代码,展示了它是如何工作的。

$('.up2').click(function() 
    $(this).closest('.node').find('.nummer_dark').text();

【讨论】:

尝试在click函数中添加console.log($(this).closest('.node'));,看看它是否至少找到了父节点。 你能确认.node 类实际上是在你的View 的父节点元素上吗?更好的类可能是.views-row 好吧,在不知道视图结构的情况下很难给出准确的代码。但是进入.closest() 调用的类必须是第一个元素中的一个类,该元素包含按钮和您想要在按钮按下期间对其进行操作的元素。假设您在视图中使用默认类,我相信.views-row 是一个安全的选择。我使用我在此处发布的相同技巧:nextawards.org/awardees/2012 用于可扩展的“阅读更多”div。 现在它适用于每个节点。谢谢您,先生,您为我节省了很多时间!

以上是关于Drupal 7 + jQuery,如何让 jQuery 只与活动节点交互(通过 nid)而不是列表中的每个节点的主要内容,如果未能解决你的问题,请参考以下文章

在 Drupal 7 中使用 JQuery

在Drupal 7中使用JQuery

Drupal 7中的PHP变量到jQuery

JavaScript Drupal 7主题:初始化JQuery脚本

如何在 drupal 7 中从前端添加内容类型

.animate() - 旧 jquery 版本(Drupal)冲突的队列模拟