0

オプション付きの<SELECT multiple="multiple">ボックスがあります。

選択したオプションをJS変数に保存します- selectedFeatures

selectedFeaturesオプションの配列変数を-に渡したいのですjQuery.inArray()が、この関数は1つの値のみを取得してチェックするように設計されています。

次のように要素のインデックスを実際に指定すると、マップ上のマーカーを表示/非表示(またはフィルター)できます:selectedFeatures[0]insideinArray()

..しかし、選択ボックスから複数のオプションを選択する可能性があるため、このフィルタリング方法は機能しません。

JS / jQueryを使用して、アイテムの配列が別の配列内にあるかどうかを確認するにはどうすればよいですか?

// store selected options as an array of string elements inside the variable
var selectedFeatures = $("#features").val();
// for every element inside 'markers.houses' array...                   
$(markers.houses).each(function(index, elem){
    // check if any of the values inside the 'selectedFeatures' array are found
    // also inside a sub-array 'features' inside every element of 'markers.houses'
    // array. if 'true' show that particular marker, otherwise hide the marker
    if(jQuery.inArray(selectedFeatures, elem.features) !== -1 || jQuery.inArray(selectedFeatures, elem.features) > -1){
        markers.houseMarkers[index].setVisible(true);
    }else{
        markers.houseMarkers[index].setVisible(false);
    }
});

図1.1-選択したオプションを配列変数に格納し、 jQuery.inArray()

4

2 に答える 2

1

あなたが求めていることは、PHPのarray_diff機能で解決できます。あなたが PHP を使用していないことは承知していますが、それが、PHP 関数を JavaScript に移植することに特化したプロジェクトであるarray_diffon PHPJSがある理由です。

とにかく、これを解決するには、基本的に を呼び出しますarray_diff(selectedFeatures,elem.features).length == 0。(引数を交換する必要があるかもしれません。どの配列があなたの質問にあるのかわかりません)

array_diff他の配列には存在しない最初の配列の要素を返します。最初の配列のすべての要素が 2 番目の配列にもある場合 (つまり、array1 が array2 のサブセットである場合)、返される配列は空になるため、その長さはゼロになります。

于 2012-06-14T14:40:21.590 に答える
1

このライブラリを確認してください: underscore.js

そして、_.difference(array, *others) を使用できます。

または、独自の関数を作成して、ある配列の値が別の配列にあるかどうかを確認することもできます。

于 2012-06-14T14:45:02.857 に答える