1

製品を表示するページがあります。包括<ul>的に、属性(など<ul id="products" subcategorynavids="someValue">)に値を追加するjQueryがいくつかあります。

ユーザーがフィルタリングリンクをクリックすると、jQueryはコンテンツをチェックし、subcategorynavidsリストされているnavidを持つ以下の製品のみを表示します。

私が問題にしているのは、属性に複数の値がリストされていて、ユーザーがフィルターリンクをもう一度クリックした場合(無効にするため)、無効になっている値のみを削除する必要があります...

たとえば、ページがに設定されて<ul id="products" subcategorynavids="9007 8019 7365">いて、ユーザーが有効/無効にするフィルターをクリックした場合navid="8019"、「8019」を削除して「9007」と「7365」を残すにはどうすればよいですか?

、、があることは知っていますが.removeAttr().removeProp()それらは属性を完全に削除するだけです(右?)。

私は次のことを試しました(予想通り、機能しませんでした)...

$("#products").attr('subcategorynavids').remove('8019');
4

4 に答える 4

3

これを行う組み込みの jQuery の方法はありません。手動で行う必要があります。

$('#products').attr('subcategorynavids', function (_, val) {
    return jQuery.grep(val.split(' '), function (val) {
        return val !== '8019';
    }).join(' ');
});

attr()ここでは、属性を更新するために使用するコールバックの方法を使用します。関数内では、現在の値を で分割しval、結果の配列をフィルタリングして、 jQuery の関数*を使用' 'していない配列を抽出し、配列を結合して の新しい値に戻します。8019grep()subcategorynavids

Array*のメソッドを使用したいのですfilter()が、最近のすべてのブラウザでサポートされているわけではないため、grep().

于 2012-12-06T02:06:08.370 に答える
2

この場合、単に使用できます.replace()

var $attrs = $("#products").attr('subcategorynavids');
$("#products").attr( 'subcategorynavids', $attrs.replace( '8019', '' ));
于 2012-12-06T02:05:18.200 に答える
0

.replace() を使用

$("#products").attr('subcategorynavids',$("#products").attr('subcategorynavids').replace('8019 ',''));

http://jsfiddle.net/laupkram/fg3dn/

于 2012-12-06T02:09:30.170 に答える
-2

これを試して

var attr = $("#products").attr('subcategorynavids');
$("#products").attr('subcategorynavids', attr.replace('8019',''));

最初にその属性の値を取得し、キーワードを除外して、新しい属性を再度設定します..簡単です

于 2012-12-06T02:14:00.340 に答える