2016-04-05 11 views
0

Birden fazla eşleşme için this.each öğesini döndüren bir jQuery eklentisi oluşturmak mümkün mü, her döngüde her nesneye bir işlev özelliği eklemem mümkün mü? Bu işlevi daha sonra doğrudan nesnenin dışında aramak istiyorum.jQuery Plugin this.each ve her nesneye function özelliği ekleyin?

(function ($) { 
    $.fn.roflcopter = function(options) { 

    return this.each(function() { 
     $(this).addClass('lol'); 
     $(this).getMyValue = function(e){ 
      return returnMyFilteredValue($(this)); 
     } 
    }); 

    function returnMyFilteredValue(elem){ 
     return $(elem).val().replace("cat", "dog"); 
    } 

    }; 
}(jQuery)); 
Sonra bir document.ready işlev çağrısında bunda istediğiniz

:

$("input.coolStuff").roflcopter(); 
var value = $("input.coolStuff").first().getMyValue(); 

bu mümkün mü

Örneğin

, burada yapmaya çalıştığım şey bu basitleştirilmiş bir versiyonu ? GetMyValue'nin bir işlev olmadığını belirten bir hata alıyorum.

+0

tarafından erişim onu '.each()' sadece verildiği nesneyi döndürür. Öğeler üzerinde döngü yapmak ve işlevin ne döndüğünü döndürmek istiyorsanız '.map() işlevini kullanın. – Barmar

cevap

0

küçük değişiklikler de .each() içinde $(this) için this ayarlamak için: Sadece 'bu' değil $ üzerinde (bu) üzerine getMyValue yerleştirin ve

$("input.coolStuff").first()[0].getMyValue() 
+0

Bu mükemmel bir şekilde çalıştı. Nasıl olur da bu işe yaramazsa (bu)? Ve neden çalışmak için bir dizi dizini geçmek zorundayım? – OwN

+0

, getMyValue öğesini 'object = $ (this)' alanına kaydedebilir, ancak daha sonra kullanmak için bu nesneyi bir yere saklamanız gerekir. Kaybettiğin için saklanmadığından beri. daha sonra $ ("input.coolStuff") 'dan erişmeyi denediğinizde, ilk() bulamaz. Aslında bir html düğüm nesnesi olan "bu" dosyasında sakladığımdan, dom ve $ ("input.coolStuff") içinde depolanır. İlk() [0] bu düğüm nesnesini –

+0

depoladığım yere verir, ancak ben Bunların hepsini yapmak zorunda değildi. Basitçe şunu yapar: 'this.getMyValue = function() { \t \t \t \t return returnMyValue ($ this); . Böyle erişirken \t \t \t} 'çok iyi çalışır: ("input.coolStuff"), her bir (fonksiyonu (e) '{' $ \t \t \t \t \t \t str + = $ (bu) [0] .getMyValue() + "\ n"; \t \t \t \t \t}); ' – OwN

0

Bir öğede bir işlevi saklamak ve çağırmak için .data()'u kullanabilirsiniz; Function.prototype.bind()getMyValue

$(function() { 
 
    (function($) { 
 
    $.fn.roflcopter = function(options) { 
 
     return this.each(function() { 
 
     $(this).addClass("lol"); 
 
     function getMyValue(e) { 
 
      return returnMyFilteredValue(this); 
 
     }; 
 
     $(this).data().getMyValue = getMyValue.bind($(this)); 
 
     }); 
 

 
     function returnMyFilteredValue(elem) { 
 
     return elem.val(function(index, val) { 
 
      return val.replace("cat", "dog"); 
 
     }) 
 
     } 
 

 
    }; 
 
    }(jQuery)); 
 

 
    $("input.coolStuff").roflcopter(); 
 
    var value = $("input.coolStuff").first().data().getMyValue(); 
 
    console.log(value, value.val()) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<input class="coolStuff" value="cat" /> 
 
<input class="coolStuff" value="cat" />

İlgili konular