Javascript 使用jQuery选择注释中包含的元素

Javascript 使用jQuery选择注释中包含的元素,javascript,jquery,Javascript,Jquery,我有一个奇怪的问题,我想知道这是否可能 我正在解析DOM,有一个元素如下: <!-- <a class="pager" title="next" href="www.text.com">NEXT</a> --> 但是我只需要返回a href的值,不需要其他注释。想法?实际上,你所要做的就是修剪它: var markup = $("*").contents().filter(function(){ return this.nodeType == 8;

我有一个奇怪的问题,我想知道这是否可能

我正在解析DOM,有一个元素如下:

<!-- <a class="pager" title="next" href="www.text.com">NEXT</a> -->

但是我只需要返回
a href
的值,不需要其他注释。想法?

实际上,你所要做的就是修剪它:

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;
});
var href=$.map($(“*”).contents(),函数(el){
var html=$.parseHTML($.trim(el.nodeValue)),
anchor=$('').append(html.find('a.pager[title=“next”]”);
返回el.nodeType===8&&anchor.length?anchor.attr('href'):null;
});

实际上,你所要做的就是修剪它:

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;
});
var href=$.map($(“*”).contents(),函数(el){
var html=$.parseHTML($.trim(el.nodeValue)),
anchor=$('').append(html.find('a.pager[title=“next”]”);
返回el.nodeType===8&&anchor.length?anchor.attr('href'):null;
});

选择注释后,您需要将其文本内容解析为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"))
  });
});
var匹配=[];
$(“*”).contents().each(函数(){
如果(this.nodeType!=8)返回;
变量$div=$(“”);
$div.append(this.nodeValue);
$div.find(“a.pager[title='next']”)。每个(函数(){
//如果您不介意,请将$(this.attr(“href”)替换为this.href
//将相对URL转换为绝对URL
匹配.push($(this.attr(“href”))
});
});

选择注释后,需要将其文本内容解析为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"))
  });
});
var匹配=[];
$(“*”).contents().each(函数(){
如果(this.nodeType!=8)返回;
变量$div=$(“”);
$div.append(this.nodeValue);
$div.find(“a.pager[title='next']”)。每个(函数(){
//如果您不介意,请将$(this.attr(“href”)替换为this.href
//将相对URL转换为绝对URL
匹配.push($(this.attr(“href”))
});
});


你不能隐藏该元素而不是对其进行注释吗?你不能隐藏该元素而不是对其进行注释吗?参见上面编辑的问题-页面上有多个注释,我只需要包含
title='next'
的注释,并从该元素中找到href。@Jascination-这有关系吗,你肯定知道如何迭代,当您在问题中这样做时?有点正确,但我不确定如何迭代并仅返回包含
title='next'
。啊,完美,
&this.nodeValue.indexOf('class=“pager”')!=-1;正是我要找的(仍在学习javascript,所以我经常不确定何时使用这些东西!请参见上面编辑的问题-页面上有多个注释,我只需要包含
title='next'
,并从该元素中找到href。@Jascination-这有关系吗,您肯定知道如何迭代,因为您在问题中这样做吗?有点像tr。)ue,但我不确定如何迭代并只返回包含
title='next'
的注释。啊,完美,
&这个.nodeValue.indexOf('class=“pager”')!=-1;
正是我要找的(仍在学习javascript,因此我经常不确定何时使用这些东西!这很接近,但出于某种原因,代码会返回页面中的所有注释url。请参见此处:单击按钮并注意,它也会显示JSFIDLE注释的url。@Jascination你是什么意思?有一条注释中有一条
href
,可以找到它。但是,我是否注意到浏览器将URL转换为绝对URL。如果这很重要,则需要替换
this.href
:@Jascination您使用了相对URL,该URL解析为指向JSFIDLE的链接。
this.href
属性反映实际目标(至少在Chrome中),即使相应的属性没有。这很接近,但由于某种原因,代码返回页面中的所有注释url。请参见此处:单击按钮并注意,它也显示了JSFIDLE注释的url。@Jascination你是什么意思?有一条注释中有一条
href
,并且找到了它。但是,我确实注意到了浏览器的转换将URL转换为绝对URL。如果这很重要,则需要替换
this.href
:@Jascination您使用了一个相对URL,该URL解析为指向JSFIDLE的链接。
this.href
属性反映实际目标(至少在Chrome中),即使相应的属性没有。为什么要使用
new RegExp
而不是文本语法?此外,如果页面上的任何评论都没有HREF,这将崩溃。使用文本语法不应该得到负面评级吗?lol。这将适用于页面中具有HREF标记属性的所有评论。是的,您是好的,我需要检查正则表达式是否真的返回了一个匹配项以避免崩溃。但它确实指向了正确的方向:P。其余部分由OP即兴发挥。如果存在不匹配项,则崩溃足以导致否决票。我想我是否应该否决Daniel使用正则表达式的答案(我想我会).
new RegExp
只是一个值得要求解释的红旗。不,当他们声称答案是完整的时,答案不应该是不完整的。为什么要使用
new RegExp
而不是文字语法?此外,如果页面上的任何注释中没有HREF,这将崩溃。不使用文字语法dese吗rve负面评级?lol。这将适用于页面中具有href标记属性的所有评论。是的,你是对的,我需要检查正则表达式是否实际返回匹配项以避免崩溃。但它确实指向正确的方向:P.Re