0

过去我从这个网站获得了很好的结果(阅读:昨天),这里的贡献者创建了这个:http: //jsbin.com/awerep/1/edit。现在我想让当前选择的选项卡与第一个选项卡交换位置。我很难理解如何使用 Jquery 和 Javascript 的 this 和 first-child 选择器。我将通过克隆第一个菜单项,将其放在单击的菜单项之前,并用单击的菜单项替换第一个菜单项来交换菜单项。我想我可以使用 jquery 的 this-child 选择器来确定包装器的当前第一个孩子。但是,如果元素的位置动态变化(由于替换),它是否也会动态更新第一个孩子是什么。还是第一个孩子仍然是元素 1?

编辑:感谢大家的帮助。这就是我所采用的(成为第一个真正按照我的意图工作的人):http: //jsbin.com/olojok/1

4

3 回答 3

0

(在 jQuery 中)This将始终是当前选定的元素。如果您希望从您可能已选择的多个元素中选择第一个元素,只需执行$('.elements')[0]or$('.elements:first-child')$('.elements:nth-child(1)')

于 2013-06-12T14:24:17.737 回答
0

每当您移动现有元素时,它只是从 DOM 中分离并重新插入到正确的位置,因此您不需要克隆任何元素。

您可以使用.siblings().first()查找当前元素的第一个同级元素,并将.insertBefore该元素移动到当前元素的前面。

然后,您可以使用.prependTo()将当前元素移动到列表中的第一个位置。

function swapWithFirst(el) {
    var $el = $(el);
    $el.siblings().first().insertBefore(el);
    $el.prependTo(el.parentNode);
}

如果父节点中不包含文本节点,则中间行可以替换为:

$el.before(el.parentNode.firstChild);
于 2013-06-12T14:31:16.760 回答
0

如果要将选定的选项卡移动到第一个位置,则将此代码添加到.click()

$(this).prependTo($(this).parent());

编辑:如果你想交换 2 个标签

var $firstTab = $('.menuitem:first');
var $clickedTab = $(this);

$firstTab.insertAfter($clickedTab);
$clickedTab.prependTo($clickedTab.parent());
于 2013-06-12T14:32:06.367 回答