1

累積的な結果を処理する場合、jQueryのchildren()またはeach()呼び出しの結果をどのようにループしますか?たとえば、チェックボックスの数値を合計し、100%を超えた場合はクラスを変更します。すべての例は、反復ごとに独立したロジックのみを実行しているようです。

私はこのc#のjavascript/jqueryと同等のものを探しています

var x = new List<int> { 1, 2, 3 };
Console.WriteLine(x.All(y => y > 0));

これは私が今持っているものですが、もっときれいなものがあるはずです。

var count = 0;
$(this).parent().children().each(
    function () {
        if ($(this).hasClass("selected")) {
            count++;
        }
    }
);

if ($(this).parent().children().length == count) {
    $(this).parent().parent().toggleClass("selected");
}
else {
    $(this).parent().parent().removeClass("selected");
}
4

4 に答える 4

3

ええと、Javascript / JqueryはSQLではなく、「累積的」/グループごとの操作の定義された概念はありません。また、「累積ロジック」はかなりあいまいな用語であり、実行する特定のタスクによって異なります。

したがって、sumの例はeach()、外部変数を使用して適合させることができinputます。/textタグの場合は次のようになります。

var sum = 0;
var objects = $("input.myclass");
objects.each(function() {sum+=Number($(this).val());});
if (sum>100) objects.addClass("anotherclass");

チェックボックスの場合:「チェックボックスの合計数」の意味がわかりませんが、値の意味ですか?

于 2012-08-14T00:57:10.503 に答える
2

明らかな反復と合計のアプローチとは別に、新しいjavascript反復関数を使用できます。あなたがそうしたいと仮定して、いくつかの数を合計します:

var sum = objects
    //convert to jquery selection of numbers
    .map(function() {return +$(this).val(); })
    //convert to javascript array
    .get() 
    //add together
    .reduce(function(a, b) { return a + b; });

あなたの例のために:

var checkboxes = $(this).parent().children()
var allSelected = checkboxes.map(function () {
    return $(this).hasClass("selected");
}).get().every(function(x) { return x; });

jQueryを拡張することで、1段階上手くいくことができます

$.fn.every = function(f) {
    return [].every.call(this, function(x) {
        return f.call(x);
    });
}

あなたを残して:

var checkboxes = $(this).parent().children()
var allSelected = checkboxes.every(function() {
    return $(this).hasClass("selected");
});
于 2012-08-14T01:02:40.640 に答える
1

線形配列操作mapやとは異なりfilter、jQueryにはポリフィルがありませんが、探しているのはですArray.reduce。新しいブラウザで十分にサポートされています。

ブール値のtoggleClass構​​文を使用して、そこにあるjavascriptを実装できます。

var count = $(this).parent().children(".selected").length;
$(this).parent().parent().toggleClass("selected",
    $(this).parent().children().length === count);
于 2012-08-14T01:01:18.390 に答える
0

それほど難しいことではありません。これが100%機能するかどうかはわかりませんが、累積ロジックを実行する方法を説明します

var score = 0;
$("#checkboxDivId input[type=checkbox]:checked").each(function()
{
    score += $(this).val();
});
if(score >= 100)
{
    //Put your code here
}

明らかに、これは、スコアがチェックボックスのvalueプロパティであり、セレクターが正しい場合にのみ機能します(セレクターが正しいかどうかについて100%確実ではありません)

于 2012-08-14T01:00:37.657 に答える