ul a"));第二种是用jQuery对象的几个methods(方法)。这两种方式还....">

当前位置:  编程技术>jquery

jQuery入门-使用选择器和事件

    来源: 互联网  发布时间:2014-09-03

    本文导语:  jQuery提供两种方式来选择html的elements,第一种是用CSS和Xpath选择器联合起来形成一个字符串来传送到jQuery的构造器(如:$("div > ul a"));第二种是用jQuery对象的几个methods(方法)。这两种方式还可以联合起来混合使用。 为了测试...

jQuery提供两种方式来选择html的elements,第一种是用CSS和Xpath选择器联合起来形成一个字符串来传送到jQuery的构造器(如:$("div > ul a"));第二种是用jQuery对象的几个methods(方法)。这两种方式还可以联合起来混合使用。

为了测试一下这些选择器,我们来试着在我们starterkit.html中选择并修改第一个ordered list.
一开始,我们需要选择这个list本身,这个list有一个ID叫“orderedlist”,通常的javascript写法是document.getElementById("orderedlist").在jQuery中,我们这样做:
$(document).ready(function() {
        $("#orderedlist").addClass("red");
});
这里将starterkit中的一个CSS样式red附加到了orderedlist上(译者Keel注:参考测试包中的css目录下的core.css,其中定义了red样式)。因此,在你刷新了starterkit.html后,你将会看到第一个有序列表(ordered list )背景色变成了红色,而第二个有序列表没有变化.
现在,让我们添加一些新的样式到list的子节点.
$(document).ready(function() {
        $("#orderedlist > li").addClass("blue");
});
这样,所有orderedlist中的li都附加了样式"blue"。
现在我们再做个复杂一点的,当把鼠标放在li对象上面和移开时进行样式切换,但只在list的最后一个element上生效。
$(document).ready(function() {
        $("#orderedlist li:last").hover(function() {
               $(this).addClass("green");
        }, function() {
               $(this).removeClass("green");
        });
});
每一个onXXX事件都有效,如onclick,onchange,onsubmit等,都有jQuery等价表示方法(译者Keel注:jQuery不喜欢onXXX,所以都改成了XXX,去掉了on)。其他的一些事件,如ready和hover,也提供了相应的方法。
用这些选择器和事件你已经可以做很多的事情了,但这里有一个更强的好东东!
$(document).ready(function() {
        $("#orderedlist").find("li").each(function(i) {
               $(this).html( $(this).html() + " BAM! " + i );
        });
});
find() 让你在已经选择的element中作条件查找,因此 $("#orderedlist).find("li") 就像 $("#orderedlist li")一样。each()方法迭代了所有的li,并可以在此基础上作更多的处理。 大部分的方法,如addClass(), 都可以用它们自己的 each() 。在这个例子中, html()用来获取每个li的html文本, 追加一些文字,并将之设置为li的html文本。(译者Keel注:从这个例子可以看到.html()方法是获取对象的html代码,而.html('xxx')是设置'xxx'为对象的html代码)
另一个经常碰到的任务是在没有被jQuery覆盖的DOM元素上call一些方法,想像一个在你用AJAX方式成功提交后的reset:
$(document).ready(function() {
        // use this to reset a single form
        $("#reset").click(function() {
               $("#form")[0].reset();
        });
});
(译者Keel注:这里作者将form的id也写成了form,源文件有,这是非常不好的写法,你可以将这个ID改成form1或者testForm,然后用$("#form1")或者$("#testForm")来表示它,再进行测试。)
这个代码选择了所有ID为"form"的元素,并在其第一个上call了一个reset()。如果你有一个以上的form,你可以这样做:
$(document).ready(function() {
        // use this to reset several forms at once
        $("#reset").click(function() {
               $("form").each(function() {
                       this.reset();
               });
        });
});
(译者Keel注:请注意一定要亲自将这些代码写在custom.js中并在starterkit.html上测试效果才能有所体会!必要时要观察starterkit.html的html代码)
这样你在点击Reset链接后,就选择了文档中所有的form元素,并对它们都执行了一次reset()。
还有一个你可能要面对的问题是不希望某些特定的元素被选择。jQuery 提供了filter() 和not() 方法来解决这个问题。 filter()以过滤表达式来减少不符合的被选择项, not()则用来取消所有符合过滤表达式的被选择项. 考虑一个无序的list,你想要选择所有的没有ul子元素的li元素。
$(document).ready(function() {
        $("li").not(":has(ul)").css("border", "1px solid black");//原文为$("li").not("[ul]").css("border", "1px solid black");
});
这个代码选择了所有的li元素,然后去除了有ul子元素的li元素。刷新浏览器后,所有的li元素都有了一个边框,只有ul子元素的那个li元素例外。
(译者Keel注:请注意体会方便之极的css()方法,并再次提醒请务必实际测试观察效果,比方说换个CSS样式呢?再加一个CSS样式呢?像这样:$("li").not("[ul]").css("border", "1px solid black").css("color","red");)
上面代码中的[expression] 语法是从XPath而来,可以在子元素和属性(elements and attributes)上用作过滤器,比如你可能想选择所有的带有name属性的链接:
$(document).ready(function() {
        $("a[name]").css("background-color","#eee"); //原文为“$("a[@name]").background("#eee");”在jQuery1.2及以上版本中,@符号应该去除,background方法被css方法取代
});
这个代码给所有带有name属性的链接加了一个背景色。(译者Keel注:这个颜色太不明显了,建议写成$("a[name]").css("background-color","#eee");) [注:在jQuery1.2及以上版本中,@符号应该去除,下文中不再说明]
更常见的情况是以name来选择链接,你可能需要选择一个有特点href属性的链接,这在不同的浏览器下对href的理解可能会不一致,所以我们的部分匹配("*=")的方式来代替完全匹配("="):
$(document).ready(function() {
        $("a[href*=/content/gallery]").click(function() {
               // do something with all links that point somewhere to /content/gallery
        });
});
到现在为止,选择器都用来选择子元素或者是过滤元素。另外还有一种情况是选择上一个或者下一个元素,比如一个FAQ的页面,答案首先会隐藏,当问题点击时,答案显示出来,jQuery代码如下:
$(document).ready(function() {
        $('#faq').find('dd').hide().end().find('dt').click(function() {
         var answer = $(this).next();
         if (answer.is(':visible')) {
             answer.slideUp();
         } else {
             answer.slideDown();
         }
     });
});
这里我们用了一些链式表达法来减少代码量,而且看上去更直观更容易理解。像'#faq' 只选择了一次,利用end()方法,第一次find()方法会结束(undone),所以我们可以接着在后面继续find('dt'),而不需要再写$('#faq').find('dt')。
在点击事件中的,我们用 $(this).next() 来找到dt下面紧接的一个dd元素,这让我们可以快速地选择在被点击问题下面的答案。
(译者Keel注:这个例子真是太酷了,FAQ中的答案可以收缩!从利用next()的思路到实现这些效果都有很多地方需要我们消化,注意 if (answer.is(':visible'))用法,注意answer.slideUp();不懂的地方赶紧查我在最开始提到的两个必看API文档)
除了选择同级别的元素外,你也可以选择父级的元素。可能你想在用户鼠标移到文章某段的某个链接时,它的父级元素--也就是文章的这一段突出显示,试试这个:
$(document).ready(function() {
        $("a").hover(function() {
               $(this).parents("p").addClass("highlight");
        }, function() {
               $(this).parents("p").removeClass("highlight");
        });
});
测试效果可以看到,移到文章某段的链接时,它所在的段全用上highlight样式,移走之后又恢复原样。
(译者Keel注:highlight是core.css中定义的样式,你也可以改变它,注意这里有第二个function()这是hover方法的特点,请在API文档中查阅hover,上面也有例子说明)
在我们继续之前我们先来看看这一步: jQuery会让代码变得更短从而更容易理解和维护,下面是$(document).ready(callback)的缩写法:
$(function() {
        // code to execute when the DOM is ready
});
应用到我们的Hello world例子中,可以这样:
$(function() {
        $("a").click(function() {
               alert("Hello world!");
        });
});
现在,我们手上有了这些基础的知识,我们可以更进一步的探索其它方面的东西,就从AJAX开始!
相关链接:

    
 
 

您可能感兴趣的文章:

  • Jquery easyui入门教程(1)
  • jquery 淡入淡出效果入门例子
  • jquery 追加tr和删除tr(新手入门)
  • jquery.qtip插件简单入门实例
  • jQuery入门-hello Jquery
  • jQuery记录之jquery入门学习笔记
  • jQuery入门-使用tablesorter插件(表格排序)
  • jQuery入门-使用FX
  • jQuery入门-使用AJAX
  • jQuery入门-制作自己的插件
  • JQuery文本改变触发事件如聚焦事件、失焦事件
  • jquery阻止后续事件只执行第一个事件
  • jquery button默认enter事件(回车事件)
  • jquery onpropertychange键盘事件用法举例
  • jquery 绑定、捕获、拦截回车事件的例子
  • jquery回车事件的示例代码
  • jQuery查看事件内容的小例子
  • jQuery回车键事件实例代码
  • JQuery中阻止事件冒泡几种方式及其区别介绍 iis7站长之家
  • JQuery中阻止事件冒泡几种方式及其区别介绍
  • jquery 回车键事件小例子
  • jquery捕捉回车事件的代码
  • jquery1.10给新增元素绑定事件的方法
  • jquery 回车事件的实例分享
  • jquery 文本框回车事件 跳到下一个文本框
  • jquery 回车事件的实现代码
  • jquery代码:多浏览器捕捉回车事件
  • JQuery如何触发元素事件
  • 使用JS或jQuery模拟鼠标点击a标签事件代码
  • jquery为动态加载的元素绑定事件的代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • jQuery日期选择插件 jQuery UI Datepicker
  • jQuery 行政区选择插件 jQuery distpicker
  • jQuery 日期选择插件 jQuery-datepicker
  • jQuery区间选择控件 jquery range picker
  • jQuery的选择器引擎 Sizzle
  • jQuery下拉选择插件 MagicCombo
  • jQuery颜色选择器 ExColor
  • jQuery 颜色选择器 mColorPicker
  • jQuery日期选择插件 glDatePicker
  • jQuery 的日期选择插件 jdPicker
  • jQuery颜色选择器插件 Farbtastic
  • jQuery时间选择插件 jTimepicker
  • jQuery 日期选择插件 pickadate.js
  • jQuery颜色选择器 iColorPicker
  • jQuery 日期选择插件 Zebra_Datepicker
  • jQuery 颜色选择器 Spectrum
  • 日期选择控件 jQuery DateInput
  • jQuery :visible 选择器(冒号)的用法
  • jQuery地区选择插件 LocationSelect
  • jQuery 颜色选择插件 evol.colorpicker
  • 通过javascript库JQuery实现页面跳转功能代码
  • jQuery鼠标动画插件 jquery-ahover
  • jQuery概述,代码举例及最新版下载
  • jQuery向导插件 Jquery Wizard Plugin
  • Jquery操作html复选框checkbox:全选,全不选和反选
  • jQuery圆角插件 jQuery Corners
  • struts+spring+hibernate+jquery实现分页功能的几个基本类介绍(异步加载)
  • jQuery相册插件 jQuery.popeye
  • jQuery UI组件 jQuery UI
  • jQuery右键菜单插件 jQuery ContextMenu
  • jQuery分页插件 Pagination jQuery Plugin


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3