包裹跨度中的每个字符

时间:2014-02-20 02:04:06

标签: jquery syntax

我正在尝试将每个数字包裹在一个范围内。

这是我在的地方。

<div class="numbers">12345</div>
<div class="numbers">12345</div>
<div class="numbers">12345</div>

$('.numbers').each(function (index) {
    var characters = $(this).text().split("");
    $(this).empty();

    $.each(characters, function (i, el) {
    $(this).append("<span>" + el + "</span");
    });

});

语法在哪里出错?

3 个答案:

答案 0 :(得分:7)

您可以使用像

这样的简单正则表达式
$('.numbers').html(function (i, html) {
    return html.replace(/(\d)/g, '<span>$1</span>');
});

演示:Fiddle


或者

$('.numbers').html(function (i, html) {
    var chars = $.trim(html).split("");
    return '<span>' + chars.join('</span><span>') + '</span>';
});

演示:Fiddle

答案 1 :(得分:4)

this中的$.each中的this$('.numbers').each中的$this = $(this); $this.empty(); $.each(characters, function (i, el) { $this.append("<span>" + el + "</span"); }); 中的{{1}}不同,因此您必须将其保存到变量才能在其中使用。

{{1}}

http://jsfiddle.net/phA8q/

答案 2 :(得分:0)

this现在就是你认为的在这里

$(this).append("<span>" + el + "</span"); 

添加控制台行会显示this是什么

console.log(this); //String {0: "1", length: 1} 

您需要从外部范围获取此内容,将其存储在变量中并引用它。

var elem = $(this);
var characters = elem.text().split("");
elem.empty();

$.each(characters, function (i, el) {
    elem.append("<span>" + el + "</span");
});