簡體   English   中英

無法從jquery對象調用的Javascript方法?

[英]Javascript methods that can not be called from jquery objects?

我正在閱讀學習jQuery 1.3(Jonathan Chaffer和Karl Swedberg),在排序表時,他們在調用.sort()之前使用.get() .sort() ,並說

我們需要將jQuery對象轉換為DOM節點數組。 盡管jQuery對象在許多方面都像數組一樣,但它們沒有任何可用的本機數組方法,例如.sort()。

碼:

$("#sort").click(function() {
        var posts = $("#posts_div .post");
        posts.sort(function(a, b) {
           return ($(a).text()) > ($(b).text());
        });       
        $.each(posts, function(index, post) { $("#posts_div").append(post); });
});​

所以我嘗試在不使用.get()情況下做到這一點,但是即使沒有.get()和最新的jQuery,它也很有用,但是不能用於1.3

所以做了一些小提琴來說清楚

**不使用.get() jquery 1.2.6 **

使用.get() jquery 1.2.6

在沒有.get()情況下工作jquery 1.7.2

使用.get() jquery 1.7.2

所以很明顯早期的jQuery對象以前沒有.sort()函數與Javascript數組相同? 但現在他們有......

所以我的問題是jQuery對象還沒有支持哪些功能,所以我們可以記住在使用之前轉換為Javascript數組?

jQuery對象目前支持3種數組方法:

var methods = 'pop push reverse shift sort splice unshift concat join slice toString indexOf lastIndexOf filter forEach every map some reduce reduceRight'.split(' ')
var implemented = $.grep(methods, function(m) {
    return $.prototype[m] == Array.prototype[m];
});
console.log(implemented); // => ["push", "sort", "splice"]

他們也有slice ,但它是不一樣的slice的陣列有:

$.prototype.slice === Array.prototype.slice // => false

jQuery確實有一個.sort方法,它沒有正式記錄,因為它不遵循通常的jQuery方法格式。

支持的唯一方法是api中列出的方法。

.sort實現為:

$.fn.sort = [].sort;

您可以根據需要以相同的方式添加自己的其他數組方法。

$.fn.reverse = [].reverse;

如果.sort未在您的jQuery版本中實現,請自行實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM