2

少し奇妙な質問があります。これが可能かどうか疑問に思っています。

私はDOMを解析していますが、次のような要素があります:

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

hrefjQuery を使用してこの要素を選択し、その値を返すことができる必要があります。私はこれを試しました:

$('a.pager[title="Next"]').attr('href');

しかし、役に立たない-ここを読むことからjQueryでHTMLコメントを選択すると、jQueryは特定の要素のみを選択できるようですnodetype

上記の要素www.text.comから値を返すことは可能ですか? HTML物事をもう少しトリッキーにするために、jQueryプラグインに依存せずにそれを行う必要があります-ネイティブJavascriptまたはプレーンjQueryのみでお願いします。

次のコードは、コメント全体 (およびページ上の他のすべてのコメントに含まれるテキスト) を返します。

$("*")
    .contents()
    .filter(function(){ return this.nodeType == 8;})
    .each(function(){ alert(this.nodeValue);});

しかし、私は の値のみを返す必要がありa href、他のコメントは必要ありません。アイデア?

4

3 に答える 3

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;
});

フィドル

于 2013-06-20T10:31:26.337 に答える
-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);
    });
于 2013-06-20T11:00:29.490 に答える