javascript 查询整个html页面中包含指定属性的所有标签

function FindProperty() {
    var _property;
    var EleList = new Array();
    var j = 0;
    var tags = "t", names = "";
    this.Find = function (property) {
        _property = property;
        Analysis(document.body.innerHTML, property);
        return EleList;
    }
    AddById = function (id) {
        var node = document.getElementById(id);
        AddElement(node);
    }
    AddByName = function (name) {
        if (names.indexOf("," + name + ",") > 0) return;
        names += "," + name + ",";
        var nodes = document.getElementsByName(name);
        if (!nodes) return;
        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].getAttribute(_property) != null) {
                AddElement(nodes[i]);
            }
        }
    }
    AddByTag = function (tag) {
        if (tags.indexOf("," + tag + ",") > 0) return;
        tags += "," + tag + ",";
        var nodes = document.getElementsByTagName(tag);
        if (!nodes) return;
        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].getAttribute(_property) != null) {
                AddElement(nodes[i]);
            }
        }
    }
    AddElement = function (element) {
        if (!element) return;
        for (var i = 0; i < EleList.length; i++) {
            if (element == EleList[i]) return;
        }
        EleList[j] = element;
        j++;
    }
    Analysis = function (rtext, property) {
        var reg = new RegExp("<[^<>]+?\\b" + property + "\\s{0,}=[^<>]+?>", "g");
        var nameReg = new RegExp("<[^<>]*?\\bname\\s{0,}=\\s{0,}[\"'](.*?)[\"'][^<>]*?>", "i");
        var idReg = new RegExp("<[^<>]*?\\bid\\s{0,}=\\s{0,}[\"'](.*?)[\"'][^<>]*?>", "i");
        var tagReg = new RegExp("<(.*?)\\s[^<>]*?>", "i");
        var result = rtext.match(reg);
        if (!result) return null;
        var list = new Array();
        for (var i = 0; i < result.length; i++) {
            rtext = result[i];
            if (idReg.test(rtext)) {
                rtext = rtext.match(idReg)[1];
                AddById(rtext);
            } else if (nameReg.test(rtext)) {
                rtext = rtext.match(nameReg)[1];
                AddByName(rtext);
            } else {
                rtext = rtext.match(tagReg)[1];
                AddByTag(rtext);
            }
        }
    }
}


这个我自己写的,还有很多地方需要改进,搜索效率也有待提升,希望多给点建议和意见:

引用上面的js 后执行下面的代码就能找到包含指定属性的所以标签:

<body>
<script language="javascript" type="text/javascript">
function Go(){
	var obj=new FindProperty();	
	var list=obj.find("mytag");
	if(!list)return;
	alert("共找到"+list.length+"个");
	for(var i=0;i<list.length;i++){
		alert(list[i].innerHTML);	
	}
}
</script> 
<div >你找不到我</div>
<div id="test" mytag="div">我是你想找的</div>
<div >你找不到我</div>
<div name="test" myTag="div">我是你想找的,可我又不喜欢你</div>
<div >你找不到我</div>
<div >我不是你想找的</div>
<div  myTag="div">怎么被你找到的?</div>
<div >你找不到我</div>
<input type="button" value="查找div中含有'myTag'属性的标签" οnclick="Go()" />
</body>


原创 [转载请注明出处]

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值