是否可以将最后一个单词换成包含不包含第一个单词的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标记包装最后一个单词。
答案 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);
});
});
这将允许您修改文本节点并插入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>";