我有一个奇怪的问题,我想知道这是否可能。
我正在解析DOM,并且有一个这样的元素:
<!-- <a class="pager" title="next" href="www.text.com">NEXT</a> -->
我需要能够使用jQuery选择此元素并返回其href
值。我试过这个:
$('a.pager[title="Next"]').attr('href');
但无济于事 - 从这里阅读Selecting HTML Comments with jQuery似乎jQuery只能选择具有特定nodetype
的元素。
是否可以从上面的www.text.com
元素返回值HTML
?为了让事情变得有点棘手,我需要在不依赖jQuery插件的情况下完成它 - 只需原生Javascript或普通jQuery。
以下代码返回整个注释(以及页面上所有其他注释中包含的文本):
$("*")
.contents()
.filter(function(){ return this.nodeType == 8;})
.each(function(){ alert(this.nodeValue);});
但我只需要返回a href
的值,而不是其他评论。想法?
答案 0 :(得分:3)
实际上,你所要做的就是修剪它:
var markup = $("*").contents().filter(function(){
return this.nodeType == 8;
}).get(0).nodeValue;
var href = $($.trim(markup)).attr('href');
修改强>
为了使其更具体,您可以随时进行一些字符串匹配:
var markup = $("*").contents().filter(function(){
return this.nodeType == 8 && this.nodeValue.indexOf('class="pager"') != -1;
});
再次编辑:
你也可以这样做:
var href = $.map($("*").contents(), function(el) {
var html = $.parseHTML( $.trim(el.nodeValue) ),
anchor = $('<div />').append(html).find('a.pager[title="next"]');
return el.nodeType === 8 && anchor.length ? anchor.attr('href') : null;
});
答案 1 :(得分:2)
选择注释后,您需要先将其文本内容解析为HTML,然后才能可靠地遍历编码的DOM:
var matches = [];
$("*").contents().each(function(){
if(this.nodeType != 8) return;
var $div = $("<div>");
$div.append(this.nodeValue);
$div.find("a.pager[title='next']").each(function(){
//replace $(this).attr("href") with this.href if you don't mind
//relative URLs getting converted to absolute URLs
matches.push($(this).attr("href"))
});
});
答案 2 :(得分:-1)
$("*")
.contents()
.filter(function(){ return this.nodeType == 8;})
.each(function(){
var regex = new RegExp('href=\"(.*)\"','g');
var hrefValue = regex.exec(this.nodeValue)[1];
alert(hrefValue);
});