【问题标题】:Wrap a span around pagination text using jquery使用 jquery 在分页文本周围环绕一个跨度
【发布时间】:2013-01-11 01:56:55
【问题描述】:

由于我们的 CMS,我无法编辑此 HTML 结构,并且您可以看到它缺少一个类/跨度,因此很难设置活动页面的样式,即“5”。同时,当最后一个分页处于活动状态时,即 '7' 会删除结尾的 V 形。

有人可以提供一个 jquery 解决方案,在 <span></span> 处于活动状态时以及最后一个分页处于活动状态时(即“7”)将其包裹在“5”周围,所以我可以设置它的样式吗?

  1. 活动页面将根据所选数字增加/减少,因此它并不总是需要跨度的“5”和“7”。
  2. jquery 不应触及同一 div 块中存在的摘要“xx 条记录/每页 xx 条记录/x 页”。
  3. 单击最后一个分页,即 7 时,V 形将被删除,活动数字位于摘要旁边。这种孤立的分页需要 span 标签而不影响摘要。

这是我提供演示的小提琴:http://jsfiddle.net/evanmoore/yay9W/

示例 1:

<div class="pag">
    <a class="prev" href="http://www.example.com">‹‹</a>
    <a href="http://www.example.com">1</a>
    <a href="http://www.example.com">2</a>
    <a href="http://www.example.com">3</a>
    <a href="http://www.example.com">4</a>
    5
    <a href="http://www.example.com">6</a>
    <a href="http://www.example.com">7</a>
    <a class="prev" href="http://www.example.com">››</a>
    xx records / xx records per page / x pages 
</div>

示例 2:如果最后一个分页处于活动状态,在本例中为 7,则 html 如下所示:

<div class="pag">
    <a class="prev" href="http://www.example.com">‹‹</a>
    <a href="http://www.example.com">1</a>
    <a href="http://www.example.com">2</a>
    <a href="http://www.example.com">3</a>
    <a href="http://www.example.com">4</a>
    <a href="http://www.example.com">5</a>
    <a href="http://www.example.com">6</a>
    7 xx records / xx records per page / x pages 
</div>

这是我提供演示的小提琴:http://jsfiddle.net/evanmoore/bqyYA/

【问题讨论】:

    标签: jquery


    【解决方案1】:

    假设我们想要包装除最后一个(包含您的摘要)之外的文本节点的任何内容,这应该可以工作:

    $('div.pag').contents(':not(:last-child)').filter(function() {
      return this.nodeType == 3;
    })
    .wrap('<span></span>')
    

    .contents 函数类似于 .children 函数,不同之处在于它也返回文本节点。过滤器检查文本节点类型。添加的过滤器会跳过最后一个子节点。

    这是演示:

    http://jsfiddle.net/36Wwt/

    【讨论】:

    • 我没有预料到这一点,但似乎在单击最后一个分页时,它最后一个子伪类不适用。我用我的例子更新了上面的描述。您会对此异常进行增强吗?
    • 这让事情变得有点复杂,因为突然间你的页码和摘要文本在同一个文本节点中......这意味着你必须以某种方式解析和拆分它并粘贴在另一个 DOM 节点中.我玩了一下,但不幸的是,目前还没有给你一个好的答案。
    【解决方案2】:

    这应该适用于大多数情况。

    上述解决方案在很多情况下都不起作用,例如我在这里粘贴的小提琴中的标记

    var elms = $('.pag').contents().filter(function () {
      return this.nodeType === 3 && $.trim(this.nodeValue) != '';
    });
    
    elms.each(function () {
      var num = Number(this.nodeValue);
      if (!isNaN(num)) {
        this.nodeValue = num;
        $(this).wrap('<span class="lonerPage"></span>');
      }
    });
    

    Check Fiddle

    【讨论】:

    • 我更新了我的描述,在单击最后一个分页时出现了我没有预料到的行为。我创建了我的 html 来向您展示我的意思。 jsfiddle.net/evanmoore/s3WWb/1
    • 问题出在第二个div.pag .. 其中7 xx records / xx records per page / x pages&lt;/div&gt; 在同一行.. 这使得解析器将整个句子视为单个文本节点而不是多个节点跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多