这一招很有实用性,实用性在哪呢哪用到哪!
优采云 发布时间: 2021-08-15 01:07这一招很有实用性,实用性在哪呢哪用到哪!
获取一个字符串,这个字符串恰好有一个html结构,也就是里面有标签节点。我们需要将某个id或者class的节点与其分离,那么我们该怎么做呢?当然,它是正则匹配提取和切割技术的混搭。为了方便复用,我写了一个函数,无论走到哪里都可以使用!这个文章的标题是“Html字符串过滤提取指定节点”。
这个技巧很实用。实用性在哪里?想想网站 的非刷新ajax。通过学习这个文章 代码,你会喜欢上 ajax 而不需要后端接口。只要有网站,在ajax请求下,提取返回的html有用信息,可以通过id和class获取节点内所有html,然后插入到页面中,这就是整个网站ajax的精髓.
function getNode(node,html){
var type=node.charAt(0);//获取类型,支持 #id、.class和tag三种类型;
var selector,data,regExp;
if(type=="#"){
selector=node.substring(1);
regExp=new RegExp(']+id=\"\\s*' + selector + '\\s*\"[^>]*>',"gi");
}else if(type=="."){
selector=node.substring(1);
regExp=new RegExp(']+class=(\"' + selector + '\"|\".*?\\s*' + selector + '\"|\"' + selector + '\\s*.*?\"|\".*?\\s*' + selector + '\\s*.*?\")[^>]*>',"gi");
}else{
selector=node;
regExp=new RegExp('|\\s+[^>].*?>)',"gi");
}
if(!html.match(regExp)){
console.log("在指定字符串中没有找到节点!")
return "";
}
var matchArr=html.split(match);
var match=html.match(regExp)[0];
if(matchArr.length > 2){//多次匹配则取第一次匹配,其余忽略
var data=matchArr.filter(function(n,index){
return index!==0;
}).join("");
}else{
var data = html.split(match)[1];
}
var tagName=match.match(/ 0) {
var temp = data.split('')[0];
var i = 0;
var pos = temp.indexOf("666
,
" mizuiren">666
,
水人">666
,
" 水人 ">666
可以匹配到id为mizuiren的节点,注意空格。
同理,类也可以匹配
水人">
,
"mizuiren com">
,
mizuiren com">
等待多次或不规则的书写,但不要写错。
除了提取id和class,还可以提取标签,比如div、span、i等所有标签,类似jq的选择器但是不同。
需要注意的是,无论提取什么类型,都只能是唯一的。如果在字符串中找到多个id和class,只会选择第一个匹配的节点,匹配节点中可能会有一些匹配节点。这不是bug,是故意弄成这样的~。最好是保证选择器的唯一性,比如使用id?
例如有以下字符串:
var html = '不要看啦,我是字符串。小明666var me="秋叶";人文风情<strong>哈哈哈哈 </strong>what?dewfq小红';
提取节点示例:
getNode(".xiaoming",html);
1
getNode("#xiao",html);
2
getNode(".qiuleqiu",html);
3
getNode("strong",html);
3