【问题标题】:jQuery Show/Hide Multiple Comment Sections on One PagejQuery在一页上显示/隐藏多个评论部分
【发布时间】:2014-01-04 12:40:25
【问题描述】:

目前,我正在使用script 在许多基于 WordPress 的网站上显示/隐藏 cmets。该脚本基本上在每个站点上都按预期工作。但是,我遇到了一个使用 Hero 主题的网站的问题。在 index 页面上,主题从 X 个帖子中提取内容。不幸的是,这会导致多次调用脚本并导致第一个帖子获得 X 个显示/隐藏按钮,而其他帖子不受影响。

我不确定如何修改脚本以分别针对每个评论部分。当然,如果主题作者没有为索引页面上的所有评论部分分配相同的 id (#commentBox),任务会更容易。我已经研究了限制脚本的范围(即,让脚本的每个实例仅影响包含它的帖子内容)并更改脚本的实际功能以考虑多个评论部分。不幸的是,我还不能让它按预期工作。

这是显示问题的索引页面的链接:http://www.sitestyling.ca/abbyphotography/blog/。第一个链接(即脚本的链接)指向一个页面,该页面已实现脚本并按预期运行。

任何帮助或建议将不胜感激。

【问题讨论】:

  • 我不相信这会帮助您解决特定问题,但如果您想了解更多背景知识,了解当您有不同的上下文时有时如何处理此问题,您可以查看:stackoverflow.com/questions/9635558/…
  • 您可能还需要考虑将帖子的标题更改为“在 jQuery 中处理重复 ID”之类的内容,因为此问题与评论部分或在jQuery.

标签: javascript jquery html wordpress


【解决方案1】:

所以在这里很明显,具有相同 ID 的多个元素是非常糟糕的魔力。无论您如何控制这些 WP 网站的加载方式,我都鼓励您修改将脚本重复注入页面,因为即使在进行更改后,您的脚本也会重复运行,因为您有多个块定义文档.ready 函数。你可以用一个全局变量来判断你的脚本是否已经被触发了,但这有点骇人听闻......

我原则上建议您在脚本中添加逻辑以执行以下操作:

  • 找到有问题的重复 ID 项并将它们重命名为独特的名称
  • 添加一个您可以引用的类而不是一个 ID
  • 重构代码以遍历从类选择器返回的项目集合
  • 如果真的非常有必要,您还可以跟踪重命名的 ID,单独检索它们并将它们重置为有问题的原始重复 ID 名称,从而为未来的页面用户认罪

这里的前几点可以通过以下方式非常简单地完成:

var uniqueAppend = 1;
var tempName = 'commentBox';
while(jQuery("#commentBox").length > 0 ){
    jQuery("#commentBox").attr('id',tempName + uniqueAppend++).addClass('commentContainer')
}

现在您可以使用 jQuery(".commentContainer") 一次找到所有评论 DIV,然后遍历该集合以执行您需要的任何操作。

【讨论】:

  • 这是我目前正在使用的脚本:pastebin.com/0GYi0Jpf。正如预期的那样,它将每个单独的评论部分包装在一个容器中,折叠容器,并添加一个按钮;但是,单击任何按钮会折叠/展开所有的评论容器。不知道我需要改变什么来解决这个问题。
  • @Zyniker - 这种行为是因为在第 36 行,您的语句“jQuery(cmetsDiv).toggle...”选择了具有 commentContainer 类的项目集合中的所有对象并调用它们的切换方法。试试这个,而不是 "jQuery(this).closest(".commentContainer").toggle..."
  • 我已经将脚本移动到标题中(至少在测试时),除了切换功能外,一切都按预期工作。奇怪的是,当我进行更改时,您建议它根本停止切换 cmets 容器。例如,sitestyling.ca/abbyphotography/….
  • 好的,解决了这个问题。只需稍微更改选择,因为它在需要上一级然后搜索同级时通过 DOM 进行搜索。无论如何,我现在使用的代码是:pastebin.com/14u7vtNL。唯一剩下的问题是 all 评论部分的评论按钮会切换,而不仅仅是点击按钮。
  • 是的,我将其更改为“jQuery(this).parents().eq(1).children(".commentContainer")”,现在可以使用了。我将不得不在这里结束一个晚上,但我认为你走在正确的轨道上。它切换所有按钮的行为是由于 ln 38 "jQuery('.toggle-cmets')" 请记住,像这样的语句从文档级别重新选择,所有与您的选择器匹配的项目。如果您只想获取当前按钮,则必须使用 jQuery(this) 的上下文来帮助您导航 DOM 并找到正确的元素,就像我们为评论容器所做的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
  • 2017-07-31
  • 2022-01-22
  • 2013-01-13
  • 1970-01-01
  • 2012-07-11
相关资源
最近更新 更多