这一招很有实用性,实用性在哪呢哪用到哪!

优采云 发布时间: 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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线