如何使用jQuery在第一个单词之外的span标签中包装文本?

时间:2011-12-09 04:23:35

标签: javascript html

是否可以将最后一个单词换成包含不包含第一个单词的span标签的字符串?所以它就是例如:

var string = 'My super text';

变为

My <span>super text</span>

我有这个:

var text = string.split(" ");

// drop the last word and store it in a variable
var last = text.pop();

// join the text back and if it has more than 1 word add the span tag
// to the last word
if (text.length > 0) {
   return text.join(" ") + " <span>" + last + "</span>";
}
else {
   return "<span>" + text.join(" ") + last + "</span>";
}

如果最后一个单词至少包含两个但不确定如何修改它,则使用span标记包装最后一个单词。

4 个答案:

答案 0 :(得分:2)

您只需要使用text.shift()来返回第一个单词,而不是返回最后一个单词的text.pop()。然后,实现这一目标会容易得多。

var text= string.split(" ");

// get the first word and store it in a variable
var first = text.shift();

// join the text back and if it has more than 1 word add the span tag
// to the last word
if (text.length > 0) {
   return first + " <span>" + text.join(" ") + "</span>";
} else {
   return "<span>" + first + "</span>";
}

答案 1 :(得分:2)

你可以用正则表达式来做。

text = text.replace(/\s(.*)$/, ' <span>$1</span>');

但是,您应该将以下内容转换为递归函数...

$('body').contents().filter(function() {
    return this.nodeType == 3;
}).each(function() {
    var node = this;
    // Normalise node.
    node.data = $.trim(node.data);

    node.data.replace(/\s+(.*)\s*$/, function(all, match, offset) {
        var chunk = node.splitText(offset);
        chunk.parentNode.removeChild(chunk);
        var span = document.createElement('span');
        span.appendChild(document.createTextNode(' ' + match));
        node.parentNode.appendChild(span);
    });
});

jsFiddle

这将允许您修改文本节点并插入span元素,而不会弄乱序列化HTML。

答案 2 :(得分:1)

var space = string.indexOf(' ');

if (space !== -1) {
   return string.slice(0,space) + " <span>" + string.slice( space ) + "</span>";
} else {
   return "<span>" + string + "</span>";
}

答案 3 :(得分:1)

您不必拆分文本,只需检查是否有空格,然后在那里插入一个范围。

此代码在第一个空格后面插入一个span,如果没有空格(idx == -1),则将span放在字符串的开头:

var idx = string.indexOf(' ');
return string.substr(0, idx + 1) + "<span>" + string.substr(idx + 1) + "</span>";