如何使用一个jquery在同一页面中制作多个“阅读更多”按钮?

2023-11-23

我想仅使用一个 jquery 在同一页面中制作多个“多读”和“少读”按钮。当我单击“阅读更多”按钮时,它会显示一些内容,并在段落末尾显示“少读”按钮。我完成了第一步。一页中有三个阅读更多按钮。一个工作正常,但另外两个不工作。请给出一些建议。

$(document).ready(function() {
  $("#toggle").click(function() {
    var elem = $("#toggle").text();
    if (elem == "Read More") {
     
      $("#toggle").text("Read Less");
      $("#text").slideDown();
    } else {

      $("#toggle").text("Read More");
      $("#text").slideUp();
    }
  });
});
#text{
  display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.25/js/uikit-icons.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.25/js/uikit.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.25/css/uikit.min.css" rel="stylesheet"/>
<div class="uk-section uk-section-small uk-section-default">
    <div class="uk-container">
        <h2 class="heading-primary uk-text-center "><span>Guide</span></h2> 
            <div class="uk-grid-divider uk-child-width-expand  uk-margin-medium-top uk-margin-mediumm-bottom" uk-grid>
                <div>
                    <div class="uk-text-left" uk-grid>
                        <div class="uk-width-1-4@s uk-text-center">
                             <img class="uk-border-square" src="https://source.unsplash.com/200x200?face" alt="Border square">
                        </div>
                        <div class="uk-width-3-4@s">
                            <h1 style="display: inline">Name</h1><h2 style="display: inline;  font-style: italic;">(Designation)</h2>
                            <p class="uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque officia optio nostrum voluptas, rem error nulla sed illo eveniet quasi.</p>        
                            <p class="uk-text-justify" id="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate repellat quae in nobis laborum laboriosam praesentium molestiae, aliquam maxime modi eos ab voluptatibus magnam, provident, dolorum, dolore adipisci! Qui dignissimos illum voluptate omnis similique repellendus. Quas quam assumenda aliquid quos expedita, sit dolorem eveniet omnis.</p><a id="toggle">Read More</a>
                        </div>
                    </div>
                      <div class="uk-text-left" uk-grid>
                        <div class="uk-width-3-4@s">
                              <h1 style="display: inline">Name</h1><h2 style="display: inline;  font-style: italic;">(Designation)</h2>
                              <p class="uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque officia optio nostrum voluptas, rem error nulla sed illo eveniet quasi.</p>        
                              <p class="uk-text-justify" id="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate repellat quae in nobis laborum laboriosam praesentium molestiae, aliquam maxime modi eos ab voluptatibus magnam, provident, dolorum, dolore adipisci! Qui dignissimos illum voluptate omnis similique repellendus. Quas quam assumenda aliquid quos expedita, sit dolorem eveniet omnis.</p><a id="toggle">Read More</a>
                          </div>
                        <div class="uk-width-1-4@s">
                            <img class="uk-border-square" src="https://source.unsplash.com/200x200?face" alt="Border square">
                        </div>
                    </div>

                    <div class="uk-text-left" uk-grid>
                        <div class="uk-width-1-4@s uk-text-center">
                             <img class="uk-border-square" src="https://source.unsplash.com/200x200?face" alt="Border square">
                        </div>
                        <div class="uk-width-3-4@s">
                            <h1 style="display: inline">Name</h1><h2 style="display: inline;  font-style: italic;">(Designation)</h2>
                            <p class="uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque officia optio nostrum voluptas, rem error nulla sed illo eveniet quasi.</p>        
                            <p class="uk-text-justify" id="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate repellat quae in nobis laborum laboriosam praesentium molestiae, aliquam maxime modi eos ab voluptatibus magnam, provident, dolorum, dolore adipisci! Qui dignissimos illum voluptate omnis similique repellendus. Quas quam assumenda aliquid quos expedita, sit dolorem eveniet omnis.</p><a id="toggle">Read More</a>
                        </div>
                    </div>
                </div>
            </div>
    </div>
</div>

Problem

您正在添加多个具有相同元素的元素id,这是不合适的,意味着当你编写 JavaScript 时会出现错误。通过使用id该代码无法区分相关的不同元素之间的差异 - 即扩展错误的文本。您也没有告诉代码有关单击的元素和要显示/隐藏的元素之间的关系。

Solution

为每个元素使用类 - 即toggle-text-button用于触发显示或隐藏该类元素的链接.toggle-text.

我使用以下代码从<a class="toggle-text-button">Read More</a>到适当的元素:

$(this).parent().children(".toggle-text").slideDown();

代码解释:

  • $(this)jquery 表示法,告诉代码从当前处于焦点的元素(即单击的元素)开始
  • .parent()将 DOM 树向上移动一个元素(另一种选择是.closest()继续向上移动,直到满足选择器条件)
  • .children(".toggle-text")找到当前元素的所有子元素(因为我们已经在 DOM 树中向上移动,这是被单击元素的父元素),与选择器匹配
  • .slideDown()向下滑动与前一系列选择器匹配的任何元素

Demo

// Add click event dynamically
$(document).on("click", ".toggle-text-button", function() {

  // Check if text is more or less
  if ($(this).text() == "Read More") {

    // Change link text
    $(this).text("Read Less");
    
    // Travel up DOM tree to parent, then find any children with CLASS .toggle-text and slide down
    $(this).parent().children(".toggle-text").slideDown();
    
  } else {


    // Change link text
    $(this).text("Read More");
    
    // Travel up DOM tree to parent, then find any children with CLASS .toggle-text and slide up 
    $(this).parent().children(".toggle-text").slideUp();
    
  }
  
});
.toggle-text {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.25/js/uikit-icons.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.25/js/uikit.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.25/css/uikit.min.css" rel="stylesheet" />
<div class="uk-section uk-section-small uk-section-default">
  <div class="uk-container">
    <h2 class="heading-primary uk-text-center "><span>Guide</span></h2>
    <div class="uk-grid-divider uk-child-width-expand  uk-margin-medium-top uk-margin-mediumm-bottom" uk-grid>
      <div>
        <div class="uk-text-left" uk-grid>
          <div class="uk-width-1-4@s uk-text-center">
            <img class="uk-border-square" src="https://source.unsplash.com/200x200?face" alt="Border square">
          </div>
          <div class="uk-width-3-4@s">
            <h1 style="display: inline">Name</h1>
            <h2 style="display: inline;  font-style: italic;">(Designation)</h2>
            <p class="uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque officia optio nostrum voluptas, rem error nulla sed illo eveniet quasi.</p>
            <p class="uk-text-justify toggle-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate repellat quae in nobis laborum laboriosam praesentium molestiae, aliquam maxime modi eos ab voluptatibus magnam, provident, dolorum, dolore adipisci! Qui dignissimos illum
              voluptate omnis similique repellendus. Quas quam assumenda aliquid quos expedita, sit dolorem eveniet omnis.</p><a class="toggle-text-button">Read More</a>
          </div>
        </div>
        
        <div class="uk-width-1-4@s uk-text-center">
            <img class="uk-border-square" src="https://source.unsplash.com/200x200?face" alt="Border square">
          </div>
          <div class="uk-width-3-4@s">
            <h1 style="display: inline">Name</h1>
            <h2 style="display: inline;  font-style: italic;">(Designation)</h2>
            <p class="uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque officia optio nostrum voluptas, rem error nulla sed illo eveniet quasi.</p>
            <p class="uk-text-justify toggle-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate repellat quae in nobis laborum laboriosam praesentium molestiae, aliquam maxime modi eos ab voluptatibus magnam, provident, dolorum, dolore adipisci! Qui dignissimos illum
              voluptate omnis similique repellendus. Quas quam assumenda aliquid quos expedita, sit dolorem eveniet omnis.</p><a class="toggle-text-button">Read More</a>
          </div>
        </div>
        
        
        <div class="uk-width-1-4@s uk-text-center">
            <img class="uk-border-square" src="https://source.unsplash.com/200x200?face" alt="Border square">
          </div>
          <div class="uk-width-3-4@s">
            <h1 style="display: inline">Name</h1>
            <h2 style="display: inline;  font-style: italic;">(Designation)</h2>
            <p class="uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque officia optio nostrum voluptas, rem error nulla sed illo eveniet quasi.</p>
            <p class="uk-text-justify toggle-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate repellat quae in nobis laborum laboriosam praesentium molestiae, aliquam maxime modi eos ab voluptatibus magnam, provident, dolorum, dolore adipisci! Qui dignissimos illum
              voluptate omnis similique repellendus. Quas quam assumenda aliquid quos expedita, sit dolorem eveniet omnis.</p><a class="toggle-text-button">Read More</a>
          </div>
        </div>
        
      </div>
    </div>
  </div>
</div>

另类演示

如果将元素与属性链接起来,则可以简化 JavaScript。请参阅下面的基本演示:

$(document).on("click", ".toggle-text-button", function() {


  if ($(this).text() == "Read More") {

    $(this).text("Read Less");
    
    // Use a jquery selector using the `.attr()` of the link
    $("#toggle-text-" + $(this).attr("toggle-text")).slideDown();

  } else {

    $(this).text("Read More");
    
    // Use a jquery selector using the `.attr()` of the link
    $("#toggle-text-" + $(this).attr("toggle-text")).slideUp();
  
  }

});
.toggle-text {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<p>Text that cannot be hidden.</p>
<p class="toggle-text" id="toggle-text-1">Text to show and hide.</p>
<a class="toggle-text-button" toggle-text="1">Read More</a>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用一个jquery在同一页面中制作多个“阅读更多”按钮? 的相关文章

随机推荐

  • 三元表达式中的 NullPointerException 为 null Long

    为什么下面这行代码会产生NullPointerException Long v 1 2 Long MAX VALUE Long null 据我所知 正在执行拆箱操作null 但为什么 注意 Long v Long null 不产生异常 因此
  • 在 Django 模型中使用 UUID 作为主键(通用关系影响)

    由于多种原因 我想在我的一些 Django 模型中使用 UUID 作为主键 如果我这样做 我仍然可以使用通过 ContentType 使用通用关系的外部应用程序 例如 contrib comments django voting 或 dja
  • CNN-LSTM 的批量归一化层

    假设我有一个这样的模型 这是时间序列预测的模型 ipt Input data shape 1 data shape 2 1 x Conv1D filters 10 kernel size 3 padding causal activatio
  • Azure Functions 应用程序在发布后为只读

    我有几个 Azure Functions 应用程序 c javascript 和 python 一段时间后它们都被随机设置为只读模式 奇怪的是 在这之前 这 3 个功能应用程序中只更新了其中一个 我知道这不一定是问题 但我希望能够从门户进行
  • 动态创建字段和方法

    我想为给定的类添加新字段 变量 和封装方法 例如 班级名称 Student 没有任何字段 如下所示 public class Student implements Serializable 然后在我的应用程序中创建一个实例 Student
  • HTML5 音频事件“进度”未触发

    我正在构建一个 a v html5 流媒体网络应用程序 这个问题涉及项目的音频部分 但我确信当我开始处理视频部分时我会遇到类似的情况 我的目标设备是 iPad 的 safari 浏览器 因此我必须这样做 html5 播放效果很好 但我有一个
  • 检查相交矩形的更快方法?

    除了我的 Rect 类 public class Rect public int x public int y public int w public int h public Rect int x int y int w int h th
  • 使用 JavaScript 正则表达式将数字 HTML 实体替换为其实际字符

    我正在尝试使用 JavaScript 和正则表达式将数字 HTML 实体替换为其实际的 Unicode 字符 例如 foo 39 s bar foo s bar 这是我到目前为止得到的 foo 39 s bar replace s g 1
  • 从 BaseAdapter 调用 notificationDataSetChanged 时 ListView 不会更新

    当底层数据发生变化时 我很难更新 ListActivity 我正在使用派生的 vom BaseAdapter 的自定义 列表 适配器 CustomListAdapter 来使用自定义列表元素 CustomListElement 填充 Lis
  • Erlang 是否总是在同一节点上的进程之间复制消息?

    演员消息传递语义的忠实实现意味着消息内容是从logical观点 即使对于不可变类型也是如此 消息内容的深度复制仍然是执行者模型实现的瓶颈 因此为了性能 某些实现支持零复制消息传递 尽管从程序员的角度来看它仍然是深度复制 是否实现了零拷贝消息
  • 如何等待网络流有数据可供读取?

    我的应用程序中有一个工作线程负责三件不同的事情 对其中两个作业的请求出现在我编写的队列中 当网络流上出现请求时 另一个作业就会被激活 我希望我的工作线程在没有工作要做时等待 这对于两个队列来说很容易 因为它们公开了一个 ManualRese
  • Jquery跨域问题

    我正在尝试访问另一个域中的网络服务 但它没有返回任何内容 后来我发现这是由于跨域访问造成的问题 网上查了很多文章 但没有一篇是像我这样的新手能读懂的 有人可以帮助我如何访问网络服务吗 以下是我的代码 variables for Add Co
  • 创建一个人类可读的列表,并在 ruby​​ 列表中的最后一个元素之前插入“and”

    如何获取一个列表并将其转换为逗号分隔的字符串 并在数组中的最后一个元素之前添加 and 采取类似的东西 list1 a b c 并将其变成这样 gt a b and c 我记得 ruby 有一个方法 然而我已经搜索过 但没有找到 谢谢您的帮
  • %matplotlib 内联在 iPython 和 Jupyter 控制台上不起作用

    我是第一次尝试 Jupyter 控制台 但无法获取 matplotlib inline工作的魔力 以下是示例会话的屏幕截图 The plot shows in a separate window after I run Line 6 and
  • 将彩色图喷射到灰度图

    我有一个喷射色彩图 我想知道是否有某种方法可以转换为灰度 我不能使用平均值 因为最大值和最小值变为相同的灰色 或者是否有某种方法可以转换为另一个调色板 我在 Google 上找不到转换它的函数 MATLAB 使用一种叫做rgb2ind但我想
  • .NET - 第一次有机会进行密集调试的异常侦听器?

    这可能不切实际 但是是否有可能使组件能够收到其进程中发生的所有首次机会异常的通知 我们有一些第三方 由我们承包 组件 它们除了吃例外之外什么也做不了 而业务关系的政治使整个考验变得非常痛苦 我们还意识到 我们的一些代码正在执行令人失望的操作
  • Visual Studio 2019 的 SSDT? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我找到了VS2017版本的安装程序here 但是有2019预览版的吗 SQL Server 报告服务和 SQL Server 分析服务 SSRS S
  • 是否可以绕过 MATLAB 对矢量格式文件中字体嵌入的限制?

    根据 MA TLAB 手册 当您使用以下命令保存图形时print或通过选择file save 如果您选择painters渲染器并保存为 PDF 或 EPS 矢量格式 所有字体都被替换 有没有办法绕过这个限制 每当我输出一个数字时 我是否使用
  • 比较Java中的日期字符串[重复]

    这个问题在这里已经有答案了 所以我正在使用dateString1 compareTo dateString2 它根据每个字符的 Unicode 值与字符串进行字典顺序比较 并返回一个 int 这是一个代码示例 String dateStri
  • 如何使用一个jquery在同一页面中制作多个“阅读更多”按钮?

    我想仅使用一个 jquery 在同一页面中制作多个 多读 和 少读 按钮 当我单击 阅读更多 按钮时 它会显示一些内容 并在段落末尾显示 少读 按钮 我完成了第一步 一页中有三个阅读更多按钮 一个工作正常 但另外两个不工作 请给出一些建议