6

我最近遇到了一个我必须使用的代码示例,并且我能够使用它,但我不太明白到底发生了什么。

以下是部分代码:

.sortElements(function(a, b){
    return $.text([a]) > $.text([b]) ? 
        inverse ? -1 : 1 
        : inverse ? 1 : -1;
}

我知道这个函数正在决定应该首先从aand中排序哪个元素b,并且我知道 inverse 正在决定排序顺序,但我不知道$.text([a])在做什么。它是否解析a为类似于parseInt(a)and的文本Date.parse(a)

谷歌帮不了我。我也查看了该jQuery网站,我发现的只是

$(selector).text(),$(selector).text(newText)函数。

这是我基于http://jsfiddle.net/gFzCk/的代码的小提琴

4

5 回答 5

9

jQuery.text为该方法的实现做了繁重的工作.text()——它似乎是一个未记录的函数,具有 的核心功能.text(),但缺少一些 jQuery 润色。

它是从 Sizzle “导入”的,它显示为Sizzle.getText.

于 2013-02-05T09:33:48.777 回答
7

检查jQuery 源代码会发现$(selector).text()您熟悉的在$.text内部使用:

jQuery.fn.extend({
    text: function( value ) {
        return jQuery.access( this, function( value ) {
            return value === undefined ?
                jQuery.text( this ) :
                this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
        }, null, value, arguments.length );
    },

这是一个未记录的函数(这意味着进一步的 jQuery 修订可能会随意删除它,而不通知您)。你会发现它的定义是这样的:

jQuery.text = Sizzle.getText;

Sizzle.getText,反过来,被记录为“用于检索 DOM 节点数组的文本值的实用程序函数”。鉴于这Sizzle.getText是一个记录在案的功能,我建议使用它而不是 jQuery 速记,因为我不希望 jQuery 很快放弃 Sizzle。

那么,这个函数就是产生 DOM 节点文本内容的一段代码。您的排序方法是按其文本内容的字母顺序对 DOM 节点进行排序。我不知道为什么作者决定获取仅包含一个元素的数组的文本([a]),而不是立即传递元素(a),这同样可以。

于 2013-02-05T09:36:18.623 回答
2

在查看您的 jsfiddle 之后,它似乎是一个从元素中获取文本的函数,类似于 .text()

console.log(a)登录<td>28/02/2013</td>

尽管

console.log($.text[a])登录28/02/2013

于 2013-02-05T09:39:44.067 回答
1

如果上面的代码做了一些有用的事情(= 根据 jQuery 文档没有任何指示),那么它可能会.text()调用aand b

我想知道为什么作者不使用$(a).text(),因为应该这样做。也许无论是否a是 jquery 包装节点,代码也可以工作:-/

于 2013-02-05T09:34:43.453 回答
0

首先是括号。ifa是一个元素,[a]是一个元素数组,因此对的调用$.text(...)将数组作为参数传递。

我找不到任何有关jQuery.text但仅适用于jQuery.fn.text. 但是,您可以看到将jQuery.text数组作为参数和标量值处理的实现。

在这种情况下,$.text([a])可能与$.text(a).

于 2013-02-05T09:41:48.613 回答