用JavaScript实现截取指定长度的HTML字符串

       /*   
        * 调整截取的字符串的位置。因为在截取一个字符串后可能存在两种情况:
        * (1)字符串末位正好处于一个标签的属性之中的某个位置。如:<a id="xxx"  href="xxx"
></a>中红色标注的位置。
        * (2)字符串末位处于一个标签内容之中的某个位置。如:<a
>here
</a> 中红色标注的位置。
        *  对于这两种情况,第二种情况可以无需特殊处理,但是第一种情况的话得将整个标签删除或者将其属性补全。删除的话
        *  将字符串的末尾位置前移至标签开始之前;而补全则是将末尾位置后移至次标签的'>'处。这里采用的是删除的方法。
        */
	function adjustByTagPostion(str){
		var left_brace_index = str.lastIndexOf('<');
		var right_brace_index = str.lastIndexOf('>');
		// 为true的话则表示字符串处于第一种情况,需要进行删除操作。
               var inTagDefinition = left_brace_index > right_brace_index;
		return inTagDefinition ? str.substring(0,left_brace_index) : str;
	}

	// 将未闭合的标签按序闭合。
	function modifyDisplayString(original, addTags){
		var tagLenth = addTags.length;
		for(var i = tagLenth-1; i >= 0; i--){
			original += '</' + addTags[i] + '>';
		}
		return original;
	}

	// 
	function splitString(original, length){
               // 此数组用于保存那些未闭合的标签。
		var non_match_tag = []
               // 如果大于字符串的总长度,返回整个字符串;否则返回指定长度的子串
 		var to = length >= original.length ? original.length : length;
		var substring = original.substring(0,to);

               // 调整字符串。
		adjustedSubString = adjustByTagPostion(substring);
		var tag_pattern = /<\s*(\w+\b)(?:[^>]*[^\/])?>|<(\/\w+)>/ig

		adjustedSubString.replace(tag_pattern, function(match,$1,$2){
			var value = $1 == '' ? ($2 == '' ? '' : $2) : $1;
			if(value.charAt(0) == '/'){
                               // 为真表示这个标签是前面最后一个为闭合标签的闭合,因此,将此标签从数组中删除。
 				if(non_match_tag.length > 0 && non_match_tag[non_match_tag.length-1] == value.substring(1)){
					non_match_tag.pop();
				}
			}else{
                               // 新的未闭合的标签,将其添加到数组中。
				non_match_tag.push(value);
			}
               });

		return modifyDisplayString(adjustedSubString, non_match_tag);
	}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值