这是我的问题 - 给定一个HTML字符串(我从元素的innerHTML中获取)包含标签和字符的混合,例如:
var s='first<font size="6">second</font>third';
我想将字符串缩短为n个字符,忽略标记,以便
shorten(13) -> 'first<font size="6">second</font>th'
shorten(7) -> 'first<font size="6">se'
shorten(2) -> 'fi'
有人可以推荐一种实现这一目标的好方法吗?谢谢! (至少一个假设没有嵌套标签的解决方案,但是更好)
答案 0 :(得分:1)
我快速解决了你的问题,它只是你的字符串的线性遍历,避免计算标签内的那些(这个函数不检查Passerby评论的无效/不匹配的标签)。
你可以使用它来实现更多功能/更精细的方式
function shorten(str, top){
var tag = false;
var count = 0;
var r = "";
for(var i=0; i<str.length; i++){
if(count == top) break;
if(str[i] == '<') tag = true;
if(str[i] == '>') {
tag = false;
r += str[i];
continue;
}
r += str[i];
if(!tag) count++;
}
return r;
}
干杯:)
编辑:将变量'str'的小错误更改为's'
答案 1 :(得分:1)
我做了类似的事情:
indexPath.section
运行此jsFiddle作为示例 https://jsfiddle.net/k59yam29/
可能不是MetalRider的解决方案,但有效...你需要一个特殊的隐藏div用于这个解决方案,不是很好。