2

Javascript で正確な値を取得する際に問題があります。

以下は、単一のアイテムにクラスがある場合の作業バージョンです。 http://jsfiddle.net/rtnNd/

実際には、コード ブロックに同じクラスの項目が複数ある場合 ( http://jsfiddle.net/rtnNd/3を参照)、クラス名を使用する最初の項目のみが選択されます。

私の問題は、クラス名を使用する最後の項目のみを取得したいということです。だから私は次のコードを使用しました:

var item = $('.itemAnchor')[6]; 
var href = $($('.hidden_elem')[1].innerHTML.replace('<!--', '').replace('-->', '')).find(item).attr('href'); 

しかし、それはうまくいきません。理由はよくわかりません。

アイテムを含む可能性のあるコードは同じクラスを使用しており、クラスは 2 アイテム、3 アイテム、または 6 回使用されている可能性があります。だからこそ、抽出する最後のアイテムだけをピックアップしたいのです。

説明してもらえますか、私の質問を読んでくれてありがとう。

4

1 に答える 1

2

「私の問題は、クラス名を使用する最後の項目のみを取得したいということです。」

OK、一般的な意味では、次の.last()方法を使用します。

var lastItem = $('.itemAnchor').last();

(フィドルで)すべてコメントアウトされているため、DOMにそのクラスの要素がないことを除いて。これが、質問で示したコードが機能しなかった理由でもあります。最初の行:

var item = $('.itemAnchor')[6];

...item変数を に設定しますundefined。セレクター'.itemAnchor'は要素を返さないため、$('.itemAnchor')は空の jQuery オブジェクトであり、 index には要素がありません6

ステートメントで開始コメントと終了コメントを削除した'.itemAnchor'に取得する html でセレクターを使用する必要があるため、次のようになります。.replace()

var href = $($('.hidden_elem')[0].innerHTML.replace('<!--','').replace('-->',''))
          .find('.itemAnchor').last().attr('href');

デモ: http://jsfiddle.net/rtnNd/4/

コメントに応じて編集:

「最後の要素より前の itemElement を取得するにはどうすればよいでしょうか。」

ここに示すように、常に最後から 2 番目の項目を.slice(-2,-1)の代わりに使用することがわかっている場合: http://jsfiddle.net/rtnNd/5/.last()

またはhref、パラメーターを含む が必要な場合は、 withh=のようなセレクターを使用できます。この場合、 orは必要ありません。'.itemAnchor[href*="h="]'.find().last().slice()

var href = $($('.hidden_elem')[0].innerHTML.replace('<!--','').replace('-->',''))
          .find('.itemAnchor[href*="h="]').attr('href');

デモ: http://jsfiddle.net/rtnNd/6/

ただし、属性を含むセレクターhrefを使用するこの最後の方法は、テキスト「h =」がどこにでもある要素をピックアップしているため、あなたのケースでは機能しますが、ピックアップhh=somethingなども行うことに注意してくださいmath=easyh=これを回避して、次のようにテストできます。

var href = $($('.hidden_elem')[0].innerHTML.replace('<!--','').replace('-->',''))
    .find('.itemAnchor')
    .filter(function() {
        return /(\?|&)h=/.test(this.href);
    }).attr('href');

デモ: http://jsfiddle.net/rtnNd/7/

于 2012-11-21T03:04:42.393 に答える