Js - 在DOM中找到第n个元素比if-else更优雅/更有效的方法

时间:2013-12-07 03:53:27

标签: javascript jquery dom move

我需要在dom中将元素向上移动一级......

所以我做了:

  jQuery(document).ready(function() {

  jQuery('.pricing-table .fancy-header').each(function() {
    jQuery(this).parent().before(this);
        })  

 });

并且这也没问题。

var $node = jQUery('.pricing-table .fancy-header');
           jQuery($node).parent().before($node);
     })

它的效果很好(http://jsfiddle.net/obmerk99/EdvTz/),我的问题是,在某些特定页面加载时,我可能有2个不同的.fancy-header元素,我需要移动第一个UP和第二个DOWN ..

请参阅小提琴:http://jsfiddle.net/obmerk99/EdvTz/3/

现在,除了一些可能的语法错误导致它失败(但我可以管理)之外,我的问题更多的是找到一种更优雅and/or这样做的有效方式而不是原始{{1}声明。

jQuery中有这样的方法吗?

1 个答案:

答案 0 :(得分:1)

“优雅”是主观的,但无论如何这里都是一个简短的方法。

jQuery('.pricing-table .fancy-header').each(function (i) {
    jQuery(this).parent()[i ? "after" : "before"](this);
});

由于您只有一两个匹配项,我们只需使用计数器选择"after"(如果1)或"before"(如果0)方法


但为了清楚起见,if声明可能会更好。您仍然可以使用i计数器。

jQuery('.pricing-table .fancy-header').each(function (i) {
    if (i)
        jQuery(this).parent().after(this);
    else
        jQuery(this).parent().before(this);
});

如果真的很重要(猜测不是),这里的效率很高:

jQuery('.pricing-table .fancy-header').each(function (i) {
    var par = this.parentNode;
    par.insertBefore(this, i ? par.nextSibling : par);
});