从我们假设 div 不包含任何子元素的简单示例开始,您可以这样做:
function wrapText(id, offset, length){
$("#"+id).html(function(i,oldHtml) {
return oldHtml.substr(0,offset) +
"<span>" +
oldHtml.substr(offset, length) +
"</span>" +
oldHtml.substr(offset + length);
});
}
wrapText("pie1",5,6); // obviously use values from your JSON here
演示:http: //jsfiddle.net/TfAAC/
当您使用回调函数调用 jQuery 的.html()
方法时,jQuery 使用当前的 html 文本调用您的函数并返回新值。
如果 div 中有子元素,则以下更复杂的代码“有效”,但在插入 span 标签时可能会创建重叠标签:
function wrapText(id, offset, length){
$("#"+id).html(function(i,oldHtml) {
var i, c, spanStart, spanStop;
for (i = 0, c = 0; i < oldHtml.length; i++) {
if (c === offset)
spanStart = i;
else if (c === offset+length) {
spanStop = i;
break;
}
if (oldHtml.charAt(i) === "<"){
while (++i < oldHtml.length && oldHtml.charAt(i) != ">" && oldHtml.charAt(i+1) != "<");
}else
c++;
}
if (spanStart === undefined)
return oldHtml;
if (spanStop === undefined)
spanStop = oldHtml.length;
return oldHtml.slice(0, spanStart) +
"<span>" + oldHtml.slice(spanStart, spanStop) + "</span>" +
oldHtml.slice(spanStop);
});
}
您可以在这个演示中看到:http: //jsfiddle.net/TfAAC/1/上面生成的 html 在“正确”的地方有 span 标签,但是当浏览器实际显示它时它不喜欢它(至少,Firefox 没有)因为重叠。