UNPKG

htm-to-json

Version:

to convert html string to json file , and also get data through tag name ,tag id and attribute value.

193 lines (185 loc) 4.91 kB
//to define constructor function htmlToJson() { }; //to implement method properties htmlToJson.prototype.convert_html_to_json = function(htmlStr,callback) { try{ var jsn = {}; var len = htmlStr.length || 0; var str = htmlStr || ""; var pos = 0; for(var j=pos;j<len;j++) { if(str.charAt(j) == '<' && str.charAt(j+1) !='/' && str.charAt(j+1) !='!') { var tagLine = ""; for(var k=++j;k<len;k++) { if(str.charAt(k) == ">") { //console.log(tagLine); var _tagNameList = tagLine && tagLine.trim().split(' '); var _tagRootName = _tagNameList[0] ,_tagValue = ""; if(!jsn.hasOwnProperty(_tagRootName)) jsn[_tagRootName] = []; if(_tagNameList.length>1) { var _tagAttr = _tagNameList.slice(1,_tagNameList.length); var _tagAttrStr = _tagAttr.join(' '); var _tagAttrJsn = {},tokenId = "",tokenVal = ""; //console.log(_tagAttrStr); for(var s=0;s<_tagAttrStr.length;s++) { if(_tagAttrStr.charAt(s) != " " && _tagAttrStr.charAt(s) != "=") tokenId += _tagAttrStr.charAt(s); if(_tagAttrStr.charAt(s) == "=") { var _checkAttrEnd = ""; for(var p = ++s;p<_tagAttrStr.length;p++) { if(p == s) { var _trimStr = _tagAttrStr.substring(p,_tagAttrStr.length); _trimStr = _trimStr && _trimStr.trim(); if(_trimStr.charAt(0) == "'") _checkAttrEnd = "'"; else if(_trimStr.charAt(0) == '"') _checkAttrEnd = '"'; else _checkAttrEnd = " "; } if(_tagAttrStr.charAt(p) != "'" && _tagAttrStr.charAt(p) != '"' && _tagAttrStr.charAt(p) != _checkAttrEnd) { tokenVal += _tagAttrStr.charAt(p); } if((tokenVal.length != 0 && _tagAttrStr.charAt(p) == _checkAttrEnd) || p == _tagAttrStr.length-1) { _tagAttrJsn[tokenId] = tokenVal; tokenId = ""; tokenVal = ""; s = p; break; } } } } //get innerHTML if(_tagRootName && _tagRootName.trim() != "script" && _tagRootName.trim() != "style") for(var v = k+1;v<len;v++) { if(str.charAt(v) == "<") { if(_tagValue.length != 0) _tagAttrJsn['innerHTML']=_tagValue; v = len; } else _tagValue += str.charAt(v); } jsn[_tagRootName].push(_tagAttrJsn); break; } else { //get innerHTML if(_tagRootName && _tagRootName.trim() != "script" && _tagRootName.trim() != "style") for(var v = k+1;v<len;v++) { if(str.charAt(v) == "<") { if(_tagValue.length != 0) { if(jsn[_tagRootName].length != 0) jsn[_tagRootName][jsn[_tagRootName].length-1]['innerHTML'] = _tagValue; else jsn[_tagRootName].push({'innerHTML' : _tagValue}); } v = len; } else _tagValue += str.charAt(v); } j=k; break; } } else { tagLine += str.charAt(k); } } } } callback(null,jsn); }catch(err) { callback(err,null); } }; //to get data by using tag property id htmlToJson.prototype.get_data_by_id = function(jsonData,id,callback) { if(id == "" || id == null || id.length == 0 || id == undefined) return ""; if(jsonData == "") return ""; var data = []; for(var key in jsonData) { for(var i=0;i<jsonData[key].length;i++) { if(jsonData[key][i].hasOwnProperty('id') || jsonData[key][i].hasOwnProperty('Id') || jsonData[key][i].hasOwnProperty('ID')) { if(jsonData[key][i]['id'] == id) data.push(jsonData[key][i]); else if(jsonData[key][i]['Id'] == id) data.push(jsonData[key][i]); else if(jsonData[key][i]['ID'] == id) data.push(jsonData[key][i]); } } } callback(null,data); }; //to get data by using tag name htmlToJson.prototype.get_data_by_tag = function(jsonData,TagName,callback) { if(TagName == "" || TagName == null || TagName.length == 0 || TagName == undefined) return ""; if(jsonData == "") return ""; var data = []; for(var key in jsonData) { if(key == TagName) data = jsonData[key]; } callback(null,data); }; //to get json data by using attribute value htmlToJson.prototype.get_data_by_attr_val = function(jsonData,attrName,callback) { if(attrName == "" || attrName == null || attrName.length == 0 || attrName == undefined) return ""; if(jsonData == "") return ""; var data = []; attrName = attrName.trim(); for(var key in jsonData) { for(var i=0;i<jsonData[key].length;i++) { for(var nkey in jsonData[key][i]) { if(jsonData[key][i][nkey] && jsonData[key][i][nkey].trim() == attrName) { data.push(jsonData[key][i]); } } } } callback(null,data); }; module.exports = new htmlToJson();