0

我已经使用下面的代码来动态地用 span 换行字符。

    $("span.count").children().andSelf().contents().each(function(){
    if (this.nodeType == 3) {
        var $this = $(this);
        $this.replaceWith($this.text().replace(/(\w)/g, "<span>$&</span>"));
    }
});

我正在尝试(一旦完成)计算包装元素的数量,以便我可以根据数量将一个类附加到它们的容器中。我尝试了各种方法(认为我的问题是试图计算动态创建的内容),但似乎没有一个有效。以下是我到目前为止的内容:

    var n = $("span.count").live().children().length;
if (n < 3) {
    $(".counter").addClass("four");
}

任何帮助将不胜感激。

4

2 回答 2

1

您可以向<span>要插入的类添加一个类,然后计算该类的数量。

于 2012-10-17T02:23:24.007 回答
0

你不能使用.live()你试图做的方式。它现在已被弃用,仅用于委托事件处理,而不用于 DOM 更改。如果您向要添加的跨度添加一个类,那么您可以简单地计算它:

$("span.count").children().andSelf().contents().each(function(){
    if (this.nodeType == 3) {
        var $this = $(this);
        $this.replaceWith($this.text().replace(/(\w)/g, "<span class="letter">$&</span>"));
    }
});

var cnt = $(".letter").length;

或者,您可以使用自定义替换函数并在每次替换时增加一个计数器:

var spanCnt = 0;
$("span.count").children().andSelf().contents().each(function(){
    if (this.nodeType == 3) {
        var $this = $(this);
        $this.replaceWith($this.text().replace(/(\w)/g, function(match) {
            ++spanCnt;
            return("<span>" + match + "</span>");
        }));
    }
});
于 2012-10-17T02:41:30.910 回答