`
wucc1986
  • 浏览: 23432 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

转jQuery1.4官方文档翻译 (二)

阅读更多

数据

.data()返回对象, .data(Object)设置对象 (.data() 文档, Commit 1, Commit 2)

有时候你可能需要在一个元素上附加一个复杂的对象。一个常见的例子是你需要从一个元素身上复制所有的数据到令一个元素上。在jQuery 1.4里, 不使用任何参数调用.data()时,.data会返回一个复杂对象。(译注: 包含所有键-值对的对象。) 调用.data(Object) 则会设置这个对象。注意这个对象还包括了元素上绑定的事件,所以用的时候要小心。

除非需要, 不然不会创建数据缓存。 (Commit 1, Commit 2, Commit 3)

jQuery使用一个独特的自定义属性来获取特定元素上附加的数据。当查找数据,但是没有新加的数据的时候,jQuery会尽量避免创建这个自定义属性。这样可能会提高性能,同时还会在这种情况下避免污染DOM。

效果 (Effects)

单个属性缓进缓出 (Per-property Easing 文档, Commit)

除了能够给一个动态效果指定缓进出函数外,你现在可以指定每个属性的缓进出函数了。James Padolsey的blog 上有更进一步的信息和演示。

$("#clickme").click(function() {
  $("div").animate({
    width: ["+=200px", "swing"],
    height: ["+=50px", "linear"],
  }, 2000, function() {
      $(this).after("<div>Animation complete.</div>");
  });
});

事件 (Events)

新方法: jQuery.proxy() (jQuery.proxy() Documenation, Commit 1, Commit 2)

如果你需要保证一个函数内的”this”恒定地保持某个值, 你可以用jQuery.proxy获得一个相同作用域的函数。

var obj = {
  name: "John",
  test: function() {
    alert( this.name );
    $("#test").unbind("click", obj.test);
  }
};

$("#test").click( jQuery.proxy( obj, "test" ) );

多个事件绑定 (.bind() 文档)

你可以通过递入一个对象来一次性绑定元素的多个事件。

$("div.test").bind({
  click: function(){
    $(this).addClass("active");
  },
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
});

‘change’和’submit’事件规范化 (Change 文档, Submit 文档)

普通的或是即时的changesubmit事件可以在各种浏览器上稳定工作了。我们覆盖了 IE里的changesubmit, 替换为与其他浏览器相同的事件。

新的事件: ‘focusin’ and ‘focusout’ (.focusin() 文档, .focusout() 文档, Commit)

focusinfocusout在一般情况下等同于focusblur, 但是多了向父元素传递的作用。如果你自己编写你的事件代理模式(TODO), 这个功能将对你有很大帮助。请注意对focusblur使用live()方法将不会起作用; 在设计的时候我们根据 DOM事件规范决定不使其向父元素传递事件。

$("form").focusout(function(event) {
    var tgt = event.target;
    if (tgt.nodeName == "INPUT" && !tgt.value) {
        $(tgt).after("nothing here");
    }
});

所有的事件都可以成为即时事件 (.live() 文档)

除了ready, focus (用focusin), 和 blur (用focusout)以外, 所有能用.bind()绑定的事件都可以成为即时事件。

live()所支持的事件里,我们对能够支持下面这几个额外的事件感到尤其骄傲。通过.live()里的事件代理, 1.4版实现了对change, submit, focusin, focusout, mouseenter, 以及mouseleave事件的跨浏览器支持。

注: 如果你需要即时的focus事件,你应该用focusinfocusout, 而不要用focusblur, 因为就像前面提到的, focusblur不向上传递。

还有, live()也接受数据对象作为参数了, 同bind()方法一样 (Commit)

live/die也支持环境变量了 (Commit)

现在可以在绑定事件的时候给选择符指定一个环境。如果环境被指定了, 只有属于这个环境下的元素才会被绑定事件。在创建即时事件的时候, 元素本身不需要已经被定义, 但是环境必须被创建。

确定ready事件至少含有body元素 (Commit)

jQuery现在会检查body是不是存在,如果不存在,会对body进行轮流探询。

在不需要手动处理内存溢出的非IE浏览器中, 卸载的速度提高了。 (Commit)

DOM操作 (Manipulation)

在jQuery 1.4里一系列的DOM操作方法的性能都有巨大的提升。

.append(), .prepend(), .before(), and .after()的性能提高了。

DOM嵌入的性能提高

.html()的性能提高到以前的3倍。

.html()的性能提高

.remove()和.empty()的速度则达到以前的4倍.

.remove() 和 .empty()的性能提高

新方法: .detach() (.detach() 文档, Commit)

detach()将一个元素从DOM里移除, 但是并不卸载关联的事件处理函数。这个方法可用于暂时性的将一个元素移除,执行相关操作,然后返回。

var foo = $("#foo").click(function() {
    // 相关操作
});
foo.detach();
// foo保留了相关处理函数
foo.appendTo("body");

新的unwrap()方法 (documentation, commit)

unwrap()方法拿到一个已知的父元素的子元素,然后将父元素用子元素替换。(译注: 将子元素从”包裹”里拿出来, 因名unwrap)。如此这般:

<body>
    <div>
        <p>annie</p> <p>davey</p> <p>stevie</p>
    </div>
</body>
$('div').unwrap();
<body>
   <p>annie</p> <p>davey</p> <p>stevie</p>
</body>

domManip方法里的缓存 (commit)

jQuery会将jQuery("<div>").after("<div>")一类方法创建的节点记入缓存。这样, 对于利用这些方法, 使用字符串进行DOM操作的页面,性能将有极大的提高。

无连接的节点间的before, after, replaceWith操作 (commit)

现在你可以对还没有放置到DOM Tree上的节点进行before, after, 和replaceWith的操作了。意味着你可以先对节点进行复杂的操作, 待完成后再放到合适的DOM位置上。这样也能尽量避免操作过程中造成重新排版。

jQuery("<div>").before("<p>Hello</p>").appendTo("body")

.clone(true) 也会复制关联数据 (clone 文档, commit)

1.3版中, .clone(true)虽然也是深度复制, 但是没有复制关联的数据。1.4版里,它则会复制数据, 同时还包括所有的事件。这点上和jQuery.extend在语义想同的, 所以普通对象和阵列会被复制, 但是自定义的对象则不会。

位移 (Offset)

.offset( coords | Function ) (.offset() 文档, commit)

现在可以设置元素的位移了! 和所有的设置函数一样, offset也可以接受一个函数作为第二个参数。

队列 (Queueing)

队列经历了一次大修, 使用队列会比使用默认的fx更易掌握。

新的 .delay() 方法 (.delay() 文档, commit)

.delay()方法会根据参数滞后若干毫秒执行队列里剩下的对象。默认的它会使用”fx”队列。但你可以选择性的通过delay方法的第二个参数选择其他队列。(译注:每个队列都以一个名字识别。)

$("div").fadeIn().delay(4000).fadeOut();

队列里的next (.queue() 文档, commit)

jQuery 1.4版里, 当队列里的一个函数被调用的时候,第一个参数会被设为另一个函数。当后者被调用的时候, 会自动排除队列里的下一个对象, 以此来推动队列到下一步。

jQuery("div").queue("ajax", function(next) {
  var self = this;
  jQuery.getJSON("/update", function(json) {
    $(self).html(json.text);
    next();
  };
}).queue("ajax", function() {
  $(this).fadeIn();
});

.clearQueue() (clearQueue 文档, commit)

队列可以被清空了。这个方法会移除队列里所有未执行的函数, 但不会移除正在运行的函数。无参数的情况下调用.clearQueue()方法将会清空默认的”fx”队列。

选择符 (Selectors)

“#id p”效率更高 (commit)

所有以ID开头的选择符都得到了优化, 能够在瞬间得到返回值。所有以ID为开头的选择符速度将一直快于其他选择符。

页面遍访 (Traversing)

.index(), .index(String) (index 文档, commit)

.index() 方法经过重写, 变得更加直观和灵活。

你可以获得一个元素相对于同父元素的指数:

// 计算第一个 <li class="current"> 元素在它所有的同父元素中的指数:
$("li.current").index()

你也可以获得一个元素在一个jQuery元素集合中的指数, 这个集合可以用一个选择符或者是一个DOM元素来指定:

// 计算这个 <h3 id="more-info"> 元素在页面上所有 <h3> 元素里的指数:
$("#more-info").index("h3")

新的.has()方法 (has 文档, commit)

这个方法相当于选择符里的:has()过滤法。它拿到一个jQuery集合,返回含有指定选择符的元素。

新的 .nextUntil(), .prevUntil(), .parentsUntil() 方法 (.nextUntil() 文档, .prevUntil() 文档, .parentsUntil() 文档, commit)

新的”until”方法类似于.nextAll(), .prevAll(), 和.parents()。区别是可以用一个选择符来停止元素探索。

.add(String, Element) (.add() 文档, commit)

可以给.add()方法指定环境了。这个功能可以用于在一个调用链中加入和操作额外元素(比如Ajax请求里返回的新元素)。

.closest(filter, DOMElement) (.closest() 文档, commit)

可以通过closest方法的第2个参数设置一个DOMElement环境。给closest设置一个环境一般能够提高这个方法的运行速度。这个优化也适用live(), 因为这个方法内部调用了closest()

常用工具 (Utilities)

jQuery.isEmptyObject() (jQuery.isEmptyObject() 文档, commit)

如果对象,em>没有任何属性, 该方法将返回truejQuery.isEmptyObject()方法不对参数进行任何检查, 所以请保证参数是一个对象。

jQuery.isPlainObject() (jQuery.isPlainObject(), commit )

如果一个对象是通过字符创建的(译注:{}),jQuery.isPlainObject()返回true; 如果对象是其他类别的对象(译注:如new Object())或者是基本类型, 则返回false

jQuery.contains() (jQuery.contains() 文档, commit)

如果两个参数都是DOM节点,并且第二个节点是嵌套在第一个节点内部的话, jQuery.contains()返回true。反之返回false

jQuery.noop (jQuery.noop() 文档, commit)

是个空的函数, 可以用在必须要有一个函数的情况下。(译注: noop是No Operation的意思。)

jQuery.unique() (jQuery.unique() 文档)

jQuery 1.4版中, jQuery.unique()方法返回结果里的元素是按照他们在页面里的顺序排序的。由于在创建jQuery集合的时候jQuery使用jQuery.unique()方法, 所以jQuery方法返回的集合也是按照他们在页面里的顺序排列的。

其他 (Miscellaneous)

jQuery.browser以浏览器引擎为中心 (jQuery.browser 文档, commit)

例如, 你可以通过jQuery.browser.webkit探测引擎是否是Webkit。

改进了对applets的处理 (commit 1, commit 2)

jQuery不再试图在Java applets上绑定事件或是数据了(绑定事件或是数据会出现错误)。

不再使用arguments.callee (commit)

为了顺应Caja的要求, 同时也因为即将开始应用的ECMAScript 5规范里将其标记为陈旧, 我们将jQuery核心中所有用到arguments.callee的代码都移除了。

用Closure Compiler替换了YUI Min (commit)

内部重组 (Internal Reorganization)

在1.4版的开发过程中的一个重点是要建立一个更易读, 更易懂的代码库。为了达到这个目标我们树立了一系列编写代码规范的向导。

下面是一些主要的变化:

  • 旧的’core.js’文件被分成了’attribute.js’, ‘css.js’, ‘data.js’, ‘manipulation.js’, ‘traversing.js’, and ‘queue.js’.
  • ready事件被移入了’core.js’ (因为它是jQuery的一个基本组成之一)。
  • 大部分核心代码都符合新的代码规范.
  • css和属性的逻辑被划分开来, 不再如以往相互缠绕。

测试 (Testing)

jQuery 1.4版发布过程中我们修复了207个问题 (比较之下1.3版里有97个修复)。

jQuery 1.4.此外, 测试的数量从jQuery 1.3.2中的1504例升到了1.4中的3060例。

所有测试都在主要浏览器里完全通过了。(Safari 3.2, Safari 4, Firefox 2, Firefox 3, Firefox 3.5, IE 6, IE 7,
IE 8, Opera 10.10, and Chrome)

jQuery 1.4 测试结果

我们尽量试图减小jQuery 1.4对大规模升级可能造成的麻烦 – 保持所有公开函数的签名不变。即使如此, 请通读下面的列表以保证你对可能对你的应用造成问题的变更。

  • .add()不再简单的将结果串联到一起, 结果将会被混合到一起, 然后根据他们在页面里的顺序排列。
  • .clone(true)将复制事件和数据, 而不仅是事件。
  • jQuery.data(elem) 不再返回id, 取而代之的是元素的对象缓存。
  • jQuery() (无参数) 不再自动转换成jQuery(document)了。
  • 通过.val(“…”)获得一个option或一个checkbox的值不再有歧义(将总是根据value属性选择, 而不是根据text的值)。(Commit)
  • jQuery.browser.version现在将返回引擎的版本.
  • 现在起将对引入的JSON更严格, 如果JSON的格式不符将会报错。如果你需要对不符合JSON严格格式的Javascript进行估值, 你必须设置请求的文件类型为纯文本, 然后用eval()来对内容估值。
  • 参数序列化默认会按照PHP/Rails的风格进行。你可以通过jQuery.ajaxSettings.traditional = true;来切换到旧的序列化方式。你也可以针对个别请求进行切换, 在调用jQuery.ajax的时候递入{traditional: true}
  • 内部的jQuery.className被移除了。
  • jQuery.extend(true, …)不再扩展复杂对象或是阵列。(TODO)
  • 如果一个Ajax请求没有指定 dataType, 而返回的数据类型是”text/javascript”, 那么回复将会被执行。之前, 必须明确的指定dataType。
  • 设置Ajax 请求的”ifModified” 属性会将ETags纳入考虑。

我们还针对1.4版中可能造成问题的变更编写了一个向后兼容的插件。如果你升级到1.4以后出现问题, 可以在引入1.4版的文件之后引入这个插件。

如何使用这个插件:

<script src="http://code.jquery.com/jquery.js"></script>
<script src="http://code.jquery.com/jquery.compat-1.3.js"></script>

原始数据和测试页面

性能测试中我们使用了下列测试套包:

结果的原始数据 (所有的数据都是 1.3.2 vs. 1.4):

函数调用的次数
547    3
760    3
500    200
896    399
23909    299
307    118
28955    100
28648    201
1662    593

DOM嵌入
558    317
1079    624
1079    516
1155    829
436    332
196    194
243    169

HTML
116    46
281    78
313    78
234    63
134    43
43    42
91    27

CSS/属性
703    370
1780    1250
1765    1250
1157    749
629    498
346    184
333    161

CSS
114    52
203    93
118    93
109    47
116    54
58    24
54    22

CSS类
553    138
1578    546
1515    501
1033    327
769    298
229    80
173    41

移除/清空
3298    286
9030    2344
7921    1703
5282    1266
2898    303
1166    140
1034    122
分享到:
评论

相关推荐

    jQuery中文文档1.8和1.4的chm文档

    《jQuery中文文档1.8和1.4的chm文档》是两个版本的jQuery官方文档的中文翻译版,主要用于帮助开发者理解和使用这个广泛应用于Web开发的JavaScript库。jQuery以其简洁的API和强大的功能,极大地简化了DOM操作、事件...

    jquery 1.4.x中文api

    我们也随即投入到翻译文档的工作中来。经过4天的努力,终于完工了。 由于赶上中国农历新年,本人未能及时制作成CHM版本,特意在开工的当天将其整理完成,由于时间赶的比较急,难免会有错误,如发现错误,请联系本人...

    JQuery_1.4_API

    我们也随即投入到翻译文档的工作中来。经过4天的努力,终于完工了。 由于赶上中国农历新年,本人未能及时制作成CHM版本,特意在开工的当天将其整理完成,由于时间赶的比较急,难免会有错误,如发现错误,请联系本人...

    jQuery EasyUI 1.4 版 API 中文版

    - **文档翻译**:1.4 版本的 API 中文版使得中国开发者更容易理解框架,降低了学习门槛。 - **在线论坛**:jQuery EasyUI 有活跃的开发者社区,可以提问、交流经验、获取帮助。 - **示例代码**:社区中有很多实际...

    jQuery 1.4参考手册.CHM

    我们也随即投入到翻译文档的工作中来。经过4天的努力,终于完工了。 由于赶上中国农历新年,本人未能及时制作成CHM版本,特意在开工的当天将其整理完成,由于时间赶的比较急,难免会有错误,如发现错误,请联系本人...

    jQueryAPI1.4.rar

    该资源"jQuery API 1.4.rar"是一个关于jQuery 1.4.1版本的速查表中文翻译版,由Shawphy翻译,原作者为G. Scott Olson。这个压缩包内含的文件"jQueryAPI1.4.chm"是一个帮助文档,方便开发者快速查找和理解jQuery ...

    JQuery EasyUI 1.4 用户手册.chm

    本人亲自制作JQuery EasyUI 1.4 用户手册,本来想翻译成中文,但后来想想还是不要译好,如果真的很多人想要中文版,那就再等下子,其实我仔细揣摩着译了几个组件了,争取原汁原味的译出来,但是由于翻译后中英文所占...

    jQuery EasyUI 1.4中文版API(2015最新).zip

    截止到目前,easyui最新版为1.4 官网文档地址:... 官网不稳定,有时候会挂掉。然后过一段又能访问,不方便 jQuery EasyUI 1.4 版 API 中文版 .exe 打开可以离线查看,已根据官方文档翻译成中文

    李炎恢在线课堂jQuery讲义(总)

    - **最新英文API文档**: [http://api.jquery.com/](http://api.jquery.com/),可通过谷歌翻译辅助阅读。 通过以上内容的梳理,我们可以看到jQuery是一款功能强大且易于使用的JavaScript库,非常适合Web开发人员...

    html+css+jsp+jQuery最全的网页开发中文帮助文档全部是.chm

    "JQuery_1.4_API.CHM"提供了jQuery API的详细说明,包括所有函数和方法的用法;"css2.0中文手册.chm"涵盖了CSS2.0的所有特性,对于理解和应用CSS非常有帮助;"Html中文手册.chm"则对HTML元素、属性和规则进行了详尽...

    jQuery EasyUI 1.4.5 版 API 中文.pdf

    此文档为 **jQuery EasyUI 1.4.5版本** 的官方API文档中文版,由 Richie696 制作,主要面向使用中文的开发人员。 该文档详细介绍了 jQuery EasyUI 各个组件的功能、用法以及API细节,对于初学者来说是一份非常宝贵...

    fullcalendar-1.4.6

    10. **文档丰富**:FullCalendar的官方文档详尽且易于理解,对于开发者来说,学习和使用都非常方便。 在fullcalendar-1.4.6的压缩包中,通常会包含以下内容: - `js`目录:存放FullCalendar的核心JavaScript文件和...

    Uploadify中文API

    因此,本中文API文档为这部分用户提供了一个方便的解决方案,帮助他们通过翻译版本快速查阅相关功能和用法。 使用Uploadify时,需要确保项目中已经引入了jQuery库,版本要求至少为1.4.x。同时,需要Flash播放器版本...

    JAVA上百实例源码以及开源项目源代码

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    java开源包1

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包11

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

    java开源包2

    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

Global site tag (gtag.js) - Google Analytics