0

更新された例:

http://jsfiddle.net/7Cwbn/62/

マーカーをクリックできます

Ctrlキーを押しながら、複数のオプションを選択します

アップデート:

スクリプトをもう少しいじって、s内のテストステートメントとしての関数に置き換えjQuery.inArray()ました。array_diff()if

また、ifロジックを少し変更しました。家だけをフィルタリングして新しいコードを試しましたが、うまくいくようです、コンドミニアムでも同じフィルタリングコードを有効にすると、フィルタリングが少し混乱します。

例:[機能]からすべてを選択すると、マップに何も表示されません。しかし、3つの利用可能な機能すべてを備えたマーカーが少なくとも2つあるので、いくつかのマーカーが表示されているはずです。

$(markers.houses).each(function(index, elem) {
        if ((array_diff(selectedFeatures, elem.features).length === 0) && (array_diff(selectedNearby, elem.nearby).length === 0)) {
            if (!markers.houseMarkers[index].visible) {
                markers.houseMarkers[index].setVisible(true);
            }
        }
    });
$(markers.condos).each(function(index, elem) {
        if ((array_diff(selectedFeatures, elem.features).length === 0) && (array_diff(selectedNearby, elem.nearby).length === 0)) {
            if (!markers.condoMarkers[index].visible) {
                markers.condoMarkers[index].setVisible(true);
            }
        }
    });

1.1-住宅とコンドミニアムのフィルタリングコードのスライス

4

1 に答える 1

1

ここにタイプミス(selectedFeaturess)がありますが、これはそれと関係がある可能性があります。

 if (jQuery.inArray(selectedFeaturess[i], elem.features) !== -1 || jQuery.inArray(selectedFeatures[i], elem.features) > -1) {

また、これは私が疑うのを助けるつもりはありません:

<option value="Wendy's">Harveys</option>

このようなコード:

if (jQuery.inArray(selectedFeatures[i], elem.features) !== -1 || jQuery.inArray(selectedFeatures[i], elem.features) > -1) {

次のように簡略化できます。

if (jQuery.inArray(selectedFeatures[i], elem.features) !== -1) {

> -1の場合は!== -1であるため、2番目の句は冗長です。たとえば、= 0の場合、IF句の最初の部分が実行され、IFステートメントの2番目の部分を実行する必要はありません。

そして最後に、$(document).ready()関数を書き直しました。主な問題は、配列内の要素をどのようにループしていたかでした。それらをjqueryセレクターとして扱い、それらに対して.each()を実行する代わりに、単純なForループを実行する必要があります。ただし、jqueryセレクターを使用してそれらの長さを確認できます。これは私にとってはうまくいきます(オプションでWendy'sの名前をHarveysに変更しました)。

$(document).ready(function() {
    //$('#filter').on('click', function(e) {
    $('#filter').click(function(e) {
        // prevent refreshing of the page
        e.preventDefault();

        // close all infoWindows
        infowindow.close();

        // hide all markers
        $(markers.houses).each(function(index, elem) {
            markers.houseMarkers[index].setVisible(false);
        });
        $(markers.condos).each(function(index, elem) {
            markers.condoMarkers[index].setVisible(false);
        });

        // get the selected features from select box
        var selectedFeatures = $("#features").val();
        var selectedNearby = $("#nearby").val();

        // for each house element...
        $(markers.houses).each(function(index, elem) {
            //first filter by selected features
            if ($(selectedFeatures).length) {
                for (var i = 0; i < selectedFeatures.length; i++) {       
                    if (jQuery.inArray(selectedFeatures[i], elem.features) !== -1) {    
                        if (!markers.houseMarkers[index].visible) {
                            markers.houseMarkers[index].setVisible(true);
                        }
                    }
                }
            }

            //then filter by nearby selections
            if ($(selectedNearby).length) {
                for (var i = 0; i < selectedNearby.length; i++) {
                    if (jQuery.inArray(selectedNearby[i], elem.nearby) !== -1) {
                        // if marker is not visible, but meets the filtering criteria - show it
                        // otherwise leave it as it is
                        if (!markers.houseMarkers[index].visible) {
                            markers.houseMarkers[index].setVisible(true);
                        }
                    }
                }
            }
        });

        // for each condo element...
        $(markers.condos).each(function(index, elem) {

            // first filter by selected features
            if ($(selectedFeatures).length) {
                 for (var i = 0; i < selectedFeatures.length; i++) {       
                    if (jQuery.inArray(selectedFeatures[i], elem.features) !== -1) {
                        // if marker is not visible, but meets the filtering criteria - show it
                        // otherwise leave it as it is
                        if (!markers.condoMarkers[index].visible) {
                            markers.condoMarkers[index].setVisible(true);
                        }
                    }
                }
            }

            //then filter by nearby selections
            if ($(selectedNearby).length) {
                for (var i = 0; i < selectedNearby.length; i++) {
                    if (jQuery.inArray(selectedNearby[i], elem.nearby) !== -1) {
                        // if marker is not visible, but meets the filtering criteria - show it
                        // otherwise leave it as it is
                        if (!markers.condoMarkers[index].visible) {
                            markers.condoMarkers[index].setVisible(true);
                        }
                    }
                }
            }
        });
    });
});
于 2012-06-15T16:27:57.043 に答える