【问题标题】:Move elements after sibling在兄弟之后移动元素
【发布时间】:2013-01-01 14:48:14
【问题描述】:

我有数百个

<div class="post">

彼此相邻。

新元素通过 AJAX 更新并置于现有元素之上。

现在有一个特殊的

<div id="ad1">

我想一直保持在第 n 位。

所以我做了那个函数:

$(".post").each(function() {
    if(cnt>2){
        $('#ad1').after(this);
    }
    cnt++;
});

它几乎可以工作,但是,#ad1 之后移动的元素顺序相反,因为循环从 1 到 n,但元素总是直接附加在 #ad1 之后。

非常欢迎任何意见。

谢谢 拉斐尔

【问题讨论】:

  • 两个答案都有效,但如果我理解的话,他们会移动 #ad1,这可能会对该 div 中的 adsense 代码造成问题。那么,在#ad1 之后移动#ad1 之前除前n 个元素之外的所有元素而不改变它们的顺序的优雅解决方案是什么?
  • 添加了第二个解决方案(未经测试)。
  • 谢谢!这段代码每次运行时都会复制#ad1,所以我在第二次运行后看到了3个实例......不明白为什么nextUntil记录了所有元素,但不包括选择器?
  • 已修复 -- 我使用了错误的 'after' 方法。

标签: jquery dom element siblings


【解决方案1】:

跳过循环。只需一行代码(在顶部添加任何新元素后运行它):

$('.post').eq(n).before($('#ad1')); // don't forget .eq is zero-based

http://jsfiddle.net/mblase75/MD4b2/2/

或者将其余部分移到广告下方:

$('.post').eq(n-1).nextUntil('#ad1').insertAfter($('#ad1'));

http://jsfiddle.net/mblase75/MD4b2/

【讨论】:

  • Blazemonger,这太疯狂了……非常感谢!我希望 Google Adsense TOS 可以让我的广告保持这样的首屏吗?
  • 您的第二种方法看起来很棒,因为(如果我理解正确的话)它不会移动 #ad1,而是移动 .post 以使 #ad1 停留在位置 n?
  • 如果是这种情况,这应该是 100% 安全的 adsense,不幸的是我不能投票,因为我到目前为止只有 11 个声誉 :(
  • 只需点击投票按钮附近的复选标记即可接受您最喜欢的答案。这会鼓励其他人在未来与您合作。
  • 哦...好的...没看到,对我的眼睛来说太小了;)再次感谢您!用你的 PayPal 地址给我发邮件,我会给你一些钱。
【解决方案2】:

你也可以在这里使用 nth-child:

$("div.post:nth-child("+n+")").before($('#ad1'));

【讨论】:

  • 抱歉,提前提交了。正如您在上面看到的,我在那个#ad1 div 中加载了adsense 广告。您和 Blazemongers 的方式不是总是创建该 div 的新实例(例如删除和读取)吗?我认为如果是这种情况,它不会与 Adsense 一起工作,我害怕尝试一下......
  • 不,它不会创建新实例。它只是复制该实例并将其放在 div post 之前。
  • 这不会干扰其中的 Google Adsense 代码吗?
  • 因为 div 实例刚刚移动到不同的地方。我不认为这应该是一个问题。
猜你喜欢
  • 1970-01-01
  • 2019-09-15
  • 2021-07-10
  • 2014-02-20
  • 1970-01-01
  • 2022-01-17
  • 2015-03-30
  • 2012-07-05
  • 2021-04-15
相关资源
最近更新 更多