jQuery 1.0 – Alpha 版本发布
我想借此机会宣布 jQuery 1.0 的第一个版本(称为 jquery-1.0a)发布。这个新的 1.0 版本旨在全面、精简且无错误。它将在很长一段时间内得到支持,直到可预见的未来。(这不是 1.0 的最终版本,最终版本将在完成全面测试后发布。)
此版本目前可在以下 URL 获取
https://jqueryjs.cn/src/jquery-1.0a.js
我需要大家做的是下载这个新版本,并使用自己的插件或应用程序对其进行测试。如果您发现任何奇怪的错误(与下面提到的任何更改无关),请在新的 jQuery 错误跟踪器中发布有关它的错误(错误描述越详细越好 - 测试页面非常受欢迎)。
proj.jquery.com 网站只是临时的,并且仍然不完整,将在完整 1.0 版本发布后迁移到 jquery.com。这个新网站包含一个完整的维基,所以如果您看到任何您想添加的内容,请随时添加。
我要感谢所有帮助使此版本发布成为可能的人。如果没有所有为该项目贡献时间和金钱的人,这个版本就不会发布。整个社区在提供支持和反馈方面非常宝贵,指导了整个项目的进展。谢谢大家,享受 - 我期待您的反馈。
— John Resig
以下是此版本中更改的发布说明。这包括许多新方法、改进、Javascript 纯粹主义者会喜欢的东西以及针对插件开发人员的更改。它们都已按类别进行整理。
新方法
(注意:其中一些方法已经存在一段时间了,但只是从未公开宣布过。)
DOM
– $().text()
返回所有匹配元素的文本内容,合并在一起。这适用于 HTML 和 XML 文档。
– $().html() 和 $().val()
它们都充当 innerHTML 和 value 的获取器和设置器。调用 .html() 将返回第一个匹配元素的 HTML 内容。调用 .html(“foo”) 将将所有匹配元素的 HTML 内容设置为 ‘foo’。
– $().toggleClass(“class”)
如果某个特定元素上存在该类,则将其移除,如果不存在,则将其添加。
– $().remove()
从 DOM 中移除所有匹配的元素。
– $().empty()
移除所有匹配元素的所有子节点。
– $().parent(“filter”)
匹配所有匹配元素的父元素,并可选地通过 “filter” 进行筛选。
– $().parents(“filter”)
匹配所有匹配元素的所有祖先元素,可选地通过 “filter” 进行筛选。
– $().siblings(“filter”)
匹配所有匹配元素的所有兄弟元素,可选地通过 “filter” 进行筛选。
– $().is(“filter”)
检查是否有任何匹配的元素与 “filter” 匹配,如果是,则表达式返回 ‘true’,否则返回 ‘false’。
活动
– $().trigger(“event”)
触发 ‘event’ 事件,使其在所有匹配的元素上发生。
– $().dobind()
现在有一个快捷方式用于在所有匹配的元素上触发特定事件。
– $().toggle( function, function )
每当点击匹配的元素时,都会触发第一个函数,再次点击时,触发第二个函数,所有后续点击将继续在两个函数之间轮换。
效果
– $().fadeTo(speed, to, callback)
这会以特定的 ‘speed’ 将所有匹配的元素淡入到某个透明度 ‘to’。完成后,将触发 callback。
– $().animate( properties, speed, callback )
有一个新的通用函数用于执行自定义动画。’properties’ 包含一个自定义键/值对对象,这些对象与您想要动画化的属性相关联,例如
$(“div”).animate({ height: 40, top: 50}, “slow”);
– $().center() 已移至单独的插件,不再包含在主 fx 包中。
AJAX
– $().ajaxStart( function ) 和 $().ajaxStop()
用于绑定回调侦听器以处理两个新事件的两个方法。每当新的 AJAX 请求开始时(并且没有其他请求正在进行时),ajaxStart 就会被触发,每当所有 AJAX 请求完成时,ajaxStop 就会被触发。这非常适合显示/隐藏 ‘加载’ 消息。
– $().ajaxError( function ), $().ajaxSuccess( function ) 和 $().ajaxComplete( function )
这些都是用于绑定回调以处理特定 AJAX 相关事件的通用方法。ajaxComplete 每当 AJAX 事件完成时就会触发(不考虑其成功状态)。ajaxError 和 ajaxSuccess 都在请求失败或成功时触发。
– $.xml() 现在是 $.ajax()
– $.ajax( options )
AJAX 方法现在可以接受一个键/值对选项对象,表示如下
$.ajax({ url: "request url", type: "POST, GET, etc", data: "A string of data to send to the server", // The three, afformentioned, callbacks complete: function(){}, success: function(){}, error: function(){} });
改进
– 现在,执行 $() 等同于执行 “new $(…)” - 因为 jQuery 现在是一个对象,并且速度快得多。
– 代码的大部分现在都带有完整的内联文档(包括注释和更好的变量名) - 这还没有完全完成,但在完整 1.0 版本发布之前会完成。
– 动画现在根据浏览器使用的当前盒子模型方案,确定元素的正确高度和宽度。
– 您现在可以将 tr、td 和 th 元素附加/预先附加到表格和表格行中 - 行为符合您的预期。
– $(document).ready() 已得到大幅改进。现在,它在所有现代浏览器中都能完美地按预期工作,即使页面中有 Adsense。
– 所有效果现在都排队,例如
$(“div”).fadeIn().fadeOut()
将使所有 div 淡入,然后淡出(一旦淡入动画完成)。但是,执行
$(“div”).fadeIn();
$(“span”).fadeOut();
将同时触发所有动画。效果仅按元素逐个基础排队。
– 动画完成后,元素的高度和宽度会自动设置为 ‘auto’(但仅当高度等效于 ‘auto’ 高度时,例如)。
– jQuery 强制在 IE 中进行布局,即使在尚未具有布局的元素上也是如此。
Javascript 纯粹主义者
– jQuery 现在完全包含在 ‘jQuery’ 命名空间内,并动态映射到 ‘$’。这几乎不会对您现有的代码产生影响,只是它使代码更加纯粹。
– 对现有 $() 函数的支持现在是通用的(因为它不查找 Prototype,而只查找 $ 函数)。
插件开发人员
– 旧的属性 .$jquery 现在是 .jquery
– $.apply() 已被移除。
– jQuery 现在将一个名为 ‘undefined’ 的全局变量设置为 undefined。您可以在代码中使用以下方式来使用它:foo === undefined。
– 类操作函数现在位于 jQuery.className.* 中。
– jQuery.browser 包含一个字符串,表示用户正在使用的浏览器,它可以是:safari、opera、msie、mozilla 或 other。
– jQuery.boxModel 如果当前浏览器支持 W3C CSS 盒模型,则为 true,否则为 false。
– $.getCSS 现在是 $.css
– $.parents() 可用于获取元素的所有祖先元素
– 所有与事件相关的函数都在 jQuery.event.* 中。
– fx 命名空间现在包含在 jQuery.fx.* 中。
– 不再存在任何 fx.Top/Left/Height/Width/Opacity 函数,它们都被转移到新的 $().animate() 函数中(该函数也处理所有排队)。
– $.param( array )
现在可以接受一个元素数组,这些元素的名称和值将被序列化为字符串。
哇,恭喜这个最新版本。
我仅仅看了几天,就已经爱上它了。与其他一些替代方案相比,它绝对棒极了。
对我来说,它唯一缺少的东西(它可能已经存在,但我错过了)是访问 XML 属性。如果我可以……
$(“somenode”, myXML).each(function(i) {
alert($(“somenode, myXML).get(i).getAttribute(“myValue”));
}
……我简直要发狂了。
还有 $().center() 被移到哪里了,以便我再次使用它?
这是一个很棒的软件包。干得好!
啊哈,发狂了。请忽略属性问题,它确实可以工作,我只是在胡闹。:)
恭喜 :)
我计划在一个朋友的投资组合网站上使用 jQuery,我将尝试将其与我的事件代码集成,该代码提供
– event.mouse() 返回鼠标位置(相对于窗口和页面)和按钮向上/向下数据;代码跟踪 onmouseup/onmousedown 事件,以提供有关当前按下鼠标按钮的可靠信息
– event.modifier() 和 event.key() 返回有关按下键和活动键修饰符的信息
– 跨浏览器一致的 event.src 和 event.target
对 $().is(filter) 的反应 - 在函数式语言中,这种方法通常称为 “any”,并且有一个配套方法 “all”,当 *所有* 元素与过滤器匹配时返回 true。我不介意在 jQuery 中看到相同的功能,但也不会因为没有它而感到冒犯。
我只想感谢您参与这个项目,并告诉您它对我来说有多有用。:)
但是,有一件事我真的很想看到 - 能够使用函数作为参数调用 filter()。也许这已经存在了,但我还没有找到。
该函数将返回 true 或 false,并且它将像 each 一样工作,只是返回函数中验证为 true 的元素。示例
(‘a’).filter(function() {
return this.href == ‘http://google.com’;
}).addClass(‘googleLink’);
哇,John.. 对性能改进表示赞赏。自您在 2006 年 1 月首次发布以来,jQuery 一直是企业内部网的基础 - 新版本经过测试并完美地交换。认为您会通过最新版本 1.0a 赞赏这些结果,因为它实现了 270% 的整体增益(通过 firefox/firebug console.time() 测试)。以下是界面各个部分(菜单、状态栏、排序引擎等使用 jQuery 以非侵入式方式添加功能)的初始化时间(以毫秒为单位)
版本密钥
jq2006may23 / jq1.0a = 增益%
性能(以毫秒为单位)
47 / 15 = 313%
46 / 15 = 307%
47 / 15 = 313%
35 / 12 = 292%
23 / 8 = 288%
25 / 8 = 313%
37 / 11 = 336%
48 / 15 = 320%
13 / 4 = 325%
69 / 21 = 329%
整体(独立线性初始化)
850 / 314 = 271% (OSX)
642 / 231 = 278% (XP)
网络作为桌面?有了这些数字...... 只是时间问题。:)
它看起来很好 :) 特别是加速。
但是:作为一个刚接触 jQuery 的人,我发现这有点反直觉
> 调用 .html() 将返回匹配的第一个元素的 HTML 内容
> 元素。调用 .html(“foo”) 将设置所有匹配元素的 HTML 内容
> 为“foo”。
我认为直观性是 jQuery 的强项之一,因此这种 getter 和 setter 的二元性让我感到惊讶。它在其他函数中使用吗?我应该重新阅读文档吗?因为如果它在那里,我完全错过了它。
这太棒了...... 赞赏。
$() 的 XPath 实现有任何改进吗?现在 .parents() 可用后,我们有祖先轴吗?
嘿,这是我的第二条评论。:)
我还想知道您是否可以包含一个 (‘#id’).hasClass() 函数,该函数根据元素是否具有某个类返回 true 或 false。
我已经使用 jQuery 一段时间了。我在我的 CMS 和我创建的网站上使用它,我必须说我真的很喜欢它!我主要使用它来使我的 Web 表单更易访问(如果用户忘记了必需的字段,如果 Web 表单需要自动获取更多选项等)......
给您竖起三个大拇指,John!我当然希望 jQuery 能坚持很长时间!我期待着最终的 1.0 版本(也许还有完整的文档?)!
非常感谢您创建 jQuery,使用它真的很简单,而且很有趣。我迫不及待地想看到将拖放和其他酷炫的 UI 添加到 jQuery 中,它已经很强大,但我感觉它只会变得更好 :)
感谢您,以及所有可能在途中提供帮助的人,这非常值得花费时间和心思。
希望 jQuery 能长寿;)
明年或今年,或者在 JavaScript 2.0 发布时,应该很有趣。
我唯一要建议的是,可下载的文档,CHM 或 PDF 或其他内容,我已经打印了备忘单(函数的可视布局),但我正在寻找更详细的脱机文档。也许如果我能找到一些时间,我会制作一个详细的备忘单。
玩得开心,
Nilesh
顺便说一句,任何尝试使用 html() 与 textarea 的人,您可能想使用以下内容......
$(‘#my_textareaID’).set(‘value’, ‘abc value here’);
因为执行一个简单的 $(‘#PX_RT_SNOTE_170’).html(‘abc ..’) 不会设置值。
只是一个提醒。因此,要清除一个 textarea,请使用类似 $(‘#my_textareaID’).set(‘value’, ”); 的内容
html() 应该在 textare 添加一个额外的元素吗?还是一个错误?如果我在 Firefox 中使用 fireBug 检查 textarea,它会显示类似 innerhtml=’abc.’ 的内容,并且该值显示为’abc.’,但 textarea 从未使用 .html(‘abc’) 更新。
无论如何,希望这对某人有所帮助 :)
Nilesh:我相信有一个 .value() 函数适合您的需求。:)
我知道这不是一个问答论坛,所以把它当作一个人的证据吧 :)
给定一个 $(‘#formtag’),是否有方法序列化整个表单(无需循环遍历其元素)以复制 POST 提交?我知道 .val(),并且看到有关 .form() 的内容,但我从未能使其正常工作。
我使用的是 1.0 alpha。
感谢您的任何帮助。
我爱 jQuery,而且不再觉得 JavaScript 那么乏味了。现在可能要更多地回到 Web 开发中。
在“父级”函数中
var ret = jQuery.map(this.cur,”d.parentNode”);
“d” 应该是一个“a”。