2

我有一个包含许多 div 的 div。所有这些细分都有许多与特定命名模式匹配的类。我有许多名为“tile1Full”、“tile1Thumb”、“BG1Full”、“BG1Thumb”的类。所以我的 html 可能看起来像这样:

<div id=parent>
    <div>
        <div class='tile1Full BG2Full border1'>
    </div>
    <div>
        <div class='tile3ContainerFull border1'>
            <div class=tile2x2Full border3></div>
        </div>
    </div>

我想用它们的“Thumb”对应物替换名称中包含“Full”的所有类,所以结果是这样的:

<div id=parent>
    <div>
        <div class='tile1Thumb BG2Thumb border1'>
    </div>
    <div>
        <div class='tile3ContainerThumb border1'>
        <div class=tile2x2Thumb border3></div>
    </div>
</div>

这是我想出的:

contents.find('div').each(function (i) {
    if ($(this).attr('class')!==undefined)
    {
        $(this).attr('class',$(this).attr('class').replace(/Full/g,'Thumb'));
    }
});

问题是,根据 Firefox“检查元素”,当我查看类属性时,新的类名就在那里。但是,当我查看 CSS 检查器时,实际上并没有应用这些类。正如预期的那样,它不再应用“完整”类,但也不再应用“拇指”类。

该类所做的其中一件事是设置 div 的宽度和高度。div 本身不包含任何内容;只是背景图像,所以由于没有应用新类,它们的宽度和高度都为 0,实际上消失了。

为什么属性检查器会报告它们具有所需的类,但 CSS 检查器却显示这些类没有被应用?

谢谢

4

3 回答 3

5

你可以这样做

$(document.body).find('div').each(function (i) {
    var c = $(this).attr('class');
    if(c !== undefined){
        c = c.replace(/Full/g,'Thumb')
        $(this).removeClass().addClass(c);
    }
});

见这里 http://jsfiddle.net/95tQA/1/

于 2013-11-10T22:48:31.567 回答
2

我认为您可以通过大量使用.attr(attr, fn)的这一部分来使其工作。我还没有机会测试它,设置一个小提琴,我会让它工作,但试试:

contents.find('div').attr("class", function (idx, cls) {
    if(/Full/.test(cls) {
        return cls.replace(/Full/g, 'Thumb');
    }
});

快速测试:

var $a = $("<div>", {"class": "test bgFull yo test2"});
$a.attr("class", function (idx, cls) {
    return cls.replace(/Full/g, 'Thumb');
});
$a.attr("class"); // 'test bgThumb yo test2'
于 2013-11-10T22:39:52.053 回答
0

这是propaply一些内部传播方法在这里出错...您是否尝试使用jQuery函数addClass()和removeClass()?这会看起来更干净。

干杯,
弗洛里安

于 2013-11-10T22:39:08.863 回答