0

これは、はるかに複雑なスクリプトのセクションからのものです。要するに、私はここで2つのことをしようとしています:

  1. 要素の子のクラス名を取得し、それらから「span」という単語を削除してから、変数に追加します(これは正常に機能します)。
  2. それらのクラス名を取得し(完全に、「span」を付けたまま)、配列に追加します。

これが私のコードです:

var currentSpans = [];

$('container').children().each(function(i2, spans) {
    if (spans.className.indexOf('span') != -1) {
        total += parseInt(spans.className.replace(/[A-Za-z$-]/g, ""),10);
        currentSpans.push(spans.attr('class'));
    }

});

それは壊れてcurrentSpans.push(spans.attr('class'));言います#<HTMLDivElement> has no method 'attr'

        currentSpans.push(spans.className());

上で使用したので、ここでは機能しません(これは予想されていました)。

私はここで何が間違っているのですか?単純な問題のように思えますが、私は空白になっています。これは、私が1日中jqueryを使用していることが原因である可能性があります。

4

2 に答える 2

2

spans.attr('class')である必要があります$(spans).attr('class')

アクセスしているときspans.classNameは、domオブジェクト参照を使用しています。これはattr()domオブジェクトのメソッドではなく、jQueryによって提供されるメソッドであるため、を使用してその要素へのjQuery参照を使用する必要があります$(spans)

更新しました:

$('.row-fluid').each(function (i, ele) {
    var total = 0;
    var currentSpans = [];

    $(ele).children().each(function (i2, spans) {
        var className = $(spans).attr('class');
        var spanClass = /span\d+/.exec(className);
        spanClass = spanClass.length > 0 ? spanClass[0] : undefined;
        if (spanClass) {
            total += parseInt(spanClass.replace("span", ""), 10);
            currentSpans.push(spanClass);
        }

    });

    console.log(currentSpans, total);
});

フィドル

于 2013-01-22T11:31:12.577 に答える
1

jQueryのeach()関数を使用すると、コールバック関数にインデックスと要素の2つの引数が与えられます。この要素はまだjQueryオブジェクトではないため、attr()関数は含まれていません。

それをjQueryオブジェクトに変換するには、角かっこで囲み、jQueryセレクターを前に置くだけです。だからspansになり$(spans)ます。

each()コールバック内で$(this)、現在のアイテムを参照するために使用することもできます。

spans.classNameclassNameはネイティブJavaScriptプロパティであるため、機能しました。

于 2013-01-22T11:33:32.517 に答える