0

我有这个问题,我想特定的(但不是特定的)类从元素转移到另一个。

这:

<span>
   <span class="THIS-something-something anotherClass"></span>
</span>

进入:

<span class="THIS-something-something">
   <span class="anotherClass"></span>
</span>

基本思想是,如果您在具有特定单词“THIS”的内部跨度中编写一个类,它将被转移到外部跨度(外部跨度是使用 .wrap 生成的)

带有“THIS”的类是一个具有类似.. 20 种不同变体的类(THIS-something-something、THIS-something-anything、THIS-and-that ..等等),而“anotherClass”是完全随机的类并且可能还会有多个……取决于我想插入多少。

我不知道那会怎样。我可能在想这一切都错了吗?

我只能让所有类都复制到外部跨度,然后我会从内部跨度中删除所有类..但这有点违背所有目的,因为它不会留下“anotherClass”并将其复制到外部元素。 ..

4

2 回答 2

1

试试这个:

$('span > span').each(function() {
    var all = $(this).attr('class').split(' ');
    for (var i = 0; i < all.length; ++i) {
        var cls = all[i];
        if (cls.indexOf('THIS-') == 0) {
            $(this).parent().addClass(cls);
            $(this).removeClass(cls);
        }
    }
});

可能存在与处理顺序相关的问题,因此选择器需要在另一个跨度内的跨度。

于 2011-04-20T07:18:50.047 回答
1
$('span[class|="THIS"]').removeClass(function (index, class) {
    var thisclass=class.match(/THIS-[^\s]+/g).join(' ');
    $(this).parent().addClass(thisclass);
    return thisclass;
});

我现在无法测试它,但稍后我会发布一个 jsFiddle。应该使用正则表达式,我只是想给你一个大纲。

基线是.removeClass()函数和属性包含前缀选择器 [name|="value"]的用法。

更新:修复了代码并添加了DemoTHIS-该代码抓取所有以on s开头的类名span并将它们移动到它们的父级(您可以在之后运行它wrap()或摆脱我的选择器并使用您的 like $(myselector).wrap(mystuff).removeClass(...);)。

于 2011-04-20T07:46:18.377 回答