JS 写的 HTML解析,获取文本内容


这个函数用来解析某个Element的innerHTML,获取其文本内容

function HtmlDecoder(){
	var converters=new Map();//转换器列表,转换器是根据Element获取文本的函数。这里的Map函数是另外一个函数,相当于C#中的Dictionary。
	this.RegisterConverter=function(tagName,conv){//登记转换器,为转换器列表添加内容
		if (converters.ContainsKey(tagName))
        {
			var index=converters.IndexOfKey(tagName);//如果已经存在对应tagName的转换器,就替换之
            converters.RemoveAt(index);
			if(conv)converters.Add(tagName,conv);
        }
        else
        {			
            if(conv)converters.Add(tagName,conv);
        }
	}
    this.Decode=function(self){return function(ele){//外部要调用的解析函数
	    if(ele.style&&ele.style["display"]=="none")return "";//如果Element是隐藏的就返回“”
	    var items=ParseElementChildren(ele);//调用“解析子元素”函数,获得Element的所有子元素
		var s="";
		if(!items||items.length<1){//如果没有子元素就调用对应“tagName”的转换器,获取该元素的文本内容
 			var conv=GetConverter(ele.tagName);
			s=conv(ele);
		}
		else{							//如果有子元素就遍历之
		    for(var i=0;i0){
								items[items.length]=html.substr(pos,index-pos);
								pos=index;
							}
							items[items.length]=ele.childNodes[i];
							pos+=outer.length;
						}
					}
					if(pos



上面代码中用到的Map函数:

function Map()
{
    var keys=[];
    var values=[];
    this.Count=0;
    var self=this;
    this.ContainsKey=function(key){
        return self.IndexOfKey(key)>-1;
    }
    this.ContainsValue=function(value){
        return self.IndexOfValue(value)>-1;
    }
    this.IndexOfKey=function(key){
        for(var i=0;iindex;i--){
            keys[i]=keys[i-1];
        }
        keys[index]=key;
        for(var i=values.length;i>index;i--){
            values[i]=values[i-1];
        }
        values[index]=value;
        self.Count++;
    }
    this.Add=function(key,value){
        self.Insert(self.Count,key,value);
    }
    this.RemoveAt=function(index){
        if(index<0||index>=self.Count)throw new Error("Index out of range");
        for(var i=index;i


转载请注明出处:http://blog.csdn.net/yueguangzhiyuan/article/details/17418701




你可能感兴趣的:(JavaScript,js,解析)