jQuery - 如果类中有特定的单词,则将类转移到另一个元素?

时间:2011-04-20 07:13:42

标签: jquery html dom-manipulation

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

这样:

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

成:

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

基本的想法是,如果你在内跨区写一个具有特定单词“THIS”的类,它将被转移到外跨区(外部跨度用.wrap生成)< / p>

带有“THIS”的课程是一个类似于... 20种不同的变化(这个东西,这个 - 东西 - 任何东西,这个和那......等等......)和“anotherClass”是完全随机的类,也可能有多个......这取决于我想插入多少。

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

我只能这样做才能将所有类复制到外跨区然后我将从内部跨度中删除所有类...但是这有点失败所有目的,因为它不会留下“anotherClass”并将其复制到外部元素......

2 个答案:

答案 0 :(得分: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);
        }
    }
});

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

答案 1 :(得分:1)

$('span[class|="THIS"]').removeClass(function (index, class) {
    var thisclass=class.match(/THIS-[^\s]+/g).join(' ');
    $(this).parent().addClass(thisclass);
    return thisclass;
});

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

基线是使用带有函数的.removeClass()Attribute Contains Prefix Selector [name|="value"]

更新:修复了代码并添加了Demo。代码抓取THIS-上以span开头的所有类名并将它们移动到父级(您可以在wrap()之后运行它或者删除我的选择器并使用类似{{1} }})。