2012-01-27 16 views
2

idプロパティのない要素を、プラグインが呼び出されたコレクション(DOM自体ではなく)から削除するにはどうすればよいですか?jQueryの選択肢からidのない要素を削除しますか?

<span id="id737293" class="attach"></span> 
<div class="attach"></span> 

jQueryの呼び出しとプラグイン:

$('.attach').attach(); 

(function($) { 

    $.fn.attach = function(options) { 
     // Remove elements (without id) on which the plugin was invoked 
     var valid = ???; 

     // Loop each valid element (with id attribute) and process 
     valid.each(function() { 
     }); 

     return this; // Maintain chainability 
    }; 

})(jQuery); 

答えて

5

IDなしの要素を除去する.filterを使用。

(function($) { 

    $.fn.attach = function(options) { 
     // Remove elements (without id) on which the plugin was invoked 
     var valid = this.filter(function() { return !!this.id; }); 

     // Loop each valid element (with id attribute) and process 
     valid.each(function() {    
     }); 

     return this; // Maintain chainability 
    }; 

})(jQuery); 

$('.attach').attach(); 

http://jsfiddle.net/5Kn9W/2/

またはvar valid = this.not(':not([id])');からhttp://jsfiddle.net/5Kn9W/1/

+0

ブリリアント。私は理解しているように、これはDOMや連鎖性に影響を与えずに選択範囲をフィルタリングするだけです。 – gremo

+0

@Gremoはい、 'valid'変数だけがフィルタリングされた要素のリストを含みます。 –

+0

それは問題ありませんが、フィルタ関数は有効な要素を返します(this.idを返します).jsfiddleは無効な要素を赤で表示します; – gremo

1
if(!$(elem).prop("id")){ 
    $(this).remove() 
} 
+0

このブレークchainabilityはウィル?私は選択の各有効な要素をループしたいが、DOM自体からその要素を削除することはしない。 – gremo

+0

あなたがチェックする必要があるのは、(!$( "some element")。prop( "id")){何かよりも} –

1
var elementsWithClassAttachAndHasId = jQuery(".attach:has([id])"); 
var elementsWithClassAttachAndNoId = jQuery(".attach:not([id])"); 
+1

これはコレクションとDOMから削除されるでしょうか? – gremo

+1

質問はそれ以来編集されているように見えますが、今私の答えを編集します。 – epascarello

関連する問題