首页游戏游戏攻略jquery被什么替代了,jquery还有人用吗

jquery被什么替代了,jquery还有人用吗

编程之家2026-05-16642次浏览

大家好,今天给各位分享jquery被什么替代了的一些知识,其中也会对jquery还有人用吗进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

jquery被什么替代了,jquery还有人用吗

vue.js能完全替代jquery在web开发中的功能吗

vue和jQuery

区别在于jQuery本质上一个只是简化了你的操作函数库而已,代表的是优化过的JavaScript dom操作。

vue的话是一个能提供动态绑定等等功能的一个框架,把你从复杂繁琐的dom操作中解放出来了,代表的是虚拟dom的新的思路。

其实两者并没有什么功能上的交集,如果你非要问可以不用vue来实现jQuery所能实现的功能的话,我只想说,能,并且更加简洁。

jquery中的delegate函数有什么用

delegate()函数用于为指定元素的一个或多个事件绑定事件处理函数。

此外,你还可以额外传递给事件处理函数一些所需的数据。

jquery被什么替代了,jquery还有人用吗

即使是执行delegate()函数之后新添加的元素,只要它符合条件,绑定的事件处理函数仍然对其有效。

此外,该函数可以为同一元素、同一事件类型绑定多个事件处理函数。触发事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。

要删除通过delegate()绑定的事件,请使用undelegate()函数。

从jQuery 1.7开始,请优先使用事件函数on()替代该函数。

该函数属于jQuery对象(实例)。

语法

jquery被什么替代了,jquery还有人用吗

jQuery 1.4.2新增该函数。其主要有以下两种形式的用法:

用法一:

jQueryObject.delegate( selector, events [, data ], handler)

用法二:jQuery 1.4.3新增支持该用法。

jQueryObject.delegate( selector, eventsMap)

参数

参数

描述

selector

String类型一个jQuery选择器,用于指定哪些后代元素可以触发绑定的事件。如果该参数为null或被省略,则表示当前元素自身绑定事件(实际触发者也可能是后代元素,只要事件流能到达当前元素即可)。

events

String类型一个或多个用空格分隔的事件类型和可选的命名空间,例如"click"、"focus click"、"keydown.myPlugin"。

data

可选/任意类型触发事件时,需要通过event.data传递给事件处理函数的任意数据。

handler

Functidelegate类型指定的事件处理函数。

eventsMap

Object类型一个Object对象,其每个属性对应事件类型和可选的命名空间(参数events),属性值对应绑定的事件处理函数(参数handler)。

关于参数events中可选的命名空间,请参考最下面的示例代码。

关于参数selector,你可以简单地理解为:如果该参数等于null或被省略,则为当前匹配元素绑定事件;否则就是为当前匹配元素的后代元素中符合selector选择器的元素绑定事件。

参数handler中的this指向当前匹配元素的后代元素中触发该事件的DOM元素。如果参数selector等于null或被省略,则this指向当前匹配元素(也就是该元素)。

delegate()还会为handler传入一个参数:表示当前事件的Event对象。

参数handler的返回值与DOM原生事件的处理函数返回值作用一致。例如"submit"(表单提交)事件的事件处理函数返回false,可以阻止表单的提交。

如果事件处理函数handler仅仅只用于返回false值,可以直接将handler设为false。

返回值

delegate()函数的返回值为jQuery类型,返回当前jQuery对象本身。

重要说明:delegate()函数并不是为当前jQuery对象匹配的元素绑定事件处理函数,而是为它们的后

代元素中符合选择器selector参数的元素绑定事件处理函数。delegate()函数并不是直接为这些后代元素挨个绑定事件,而是"委托"给当前

jQuery对象的匹配元素来处理。由于DOM

2级的事件流机制,当后代元素selector触发事件时,该事件会在事件冒泡中传递给其所有的祖辈元素,当事件流传递到当前匹配元素时,jQuery会

判断是哪个后代元素触发了事件,如果该元素符合选择器selector,jQuery就会捕获该事件,从而执行绑定的事件处理函数。

示例&说明

以点击事件("click")为例,以下是jQuery中事件函数的常规用法(某些函数也存在其它形式的用法,此处暂不列出):

//这里的选择器selector用于指定可以触发事件的元素

//这里的选择器ancestor应是selector的祖辈元素,selector触发的事件可以被其祖辈元素在事件流中捕获,从而以"代理"的形式触发事件。

// jQuery 1.0+(1.4.3+支持参数data)

$("selector").click( [ data,] handler);

// jQuery 1.0+(1.4.3+支持参数data)

$("selector").bind("click" [, data ], handler);

// jQuery 1.3+(1.4+支持参数data)

$("selector").live("click" [, data ], handler);

// jQuery 1.4.2+

$("ancestor").delegate("selector","click" [, data ], handler);

// jQuery 1.7+

$("ancestor").on("click","selector" [, data ], handler);

请参考下面这段初始HTML代码:

<div id="n1">

<p id="n2"><span>CodePlayer</span></p>

<p id="n3"><span>专注于编程开发技术分享</span></p>

<em id="n4">;

</div>

<p id="n5">Google</p>

我们为<div>中的所有<p>元素绑定点击事件:

//为div中的所有p元素绑定click事件处理程序

//只有n2、n3可以触发该事件

$("div").delegate("p","click", function(){

//这里的this指向触发点击事件的p元素(Element)

alert($(this).text());

});

运行代码(其他代码请自行复制到演示页面运行)

如果要绑定所有的<p>元素,你可以编写如下jQuery代码:

//为所有p元素绑定click事件处理程序(body内的所有p元素,就包含所有的p元素)

//n2、n3、n5均可触发该事件

$("body").delegate("p","click", function(event){

//这里的this指向触发点击事件的p元素(Element)

alert($(this).text());

});

此外,我们还可以同时绑定多个事件,并为事件处理函数传递一些附加的数据,我们可以通过jQuery为事件处理函数传入的参数event(Event事件对象)来进行处理:

var data={ id: 5, name:"李四"};

//为n5绑定mouseenter mouseleave两个事件,并为其传入附加数据data

//附加数据可以是任意类型

$("body").delegate("#n5","mouseenter mouseleave", data, function(event){

var$me=$(this);

var options= event.data;//这就是传入的附加数据

if( event.type=="mouseenter"){

$me.html("你好,"+ options.name+"!");

}else if(event.type=="mouseleave"){

$me.html("再见,"+ options.name+"!");

}

});

此外,即使符合条件的元素是delegate()函数执行后新添加,绑定事件对其依然有效。同样以初始HTML代码为例,我们可以编写如下jQuery代码:

//为div中的所有p元素绑定click事件处理程序

//只有n2、n3可以触发该事件

$("div").delegate("p","click", function(event){

alert($(this).text());

});

//后添加的n6也可以触发上述click事件,因为它也是div中的p元素

$("#n1").append('<p id="n6">上述绑定的click事件对此元素也生效!</p>');

参数events还支持为事件类型附加额外的命名空间。当为同一元素绑定多个相同类型的事件处理函数时。使用命名空间,可以在触发事件、移除事件时限定触发或移除的范围。

function clickHandler(event){

alert("触发时的命名空间:["+ event.namespace+"]");

}

var$p=$("p");

// A:为所有p元素绑定click事件,定义在foo和bar两个命名空间下

$("body").delegate("p","click.foo.bar", clickHandler);

// B:为所有p元素绑定click事件,定义在test命名空间下

$("body").delegate("p","click.test", clickHandler);

var$n2=$("#n2");

//触发所有click事件

$n2.trigger("click");//触发A和B(event.namespace="")

//触发定义在foo命名空间下的click事件

$n2.trigger("click.foo");//触发A(event.namespace="foo")

//触发定义在bar命名空间下的click事件

$n2.trigger("click.bar");//触发A(event.namespace="bar")

//触发同时定义在foo和bar两个命名空间下的click事件

$n2.trigger("click.foo.bar");//触发A(event.namespace="bar.foo")

//触发定义在test命名空间下的click事件

$n2.trigger("click.test");//触发B(event.namespace="test")

//移除所有p元素定义在foo命名空间下的click事件处理函数

$p.undelegate("click.foo");//移除A

delegate()函数的参数eventsMap是一个对象,可以"属性-值"的方式指定多个"事件类型-处理函数"。对应的示例代码如下:

var events={

"mouseenter": function(event){

$(this).html("你好!");

},

"mouseleave": function(event){

$(this).html("再见!");

}

};

//为n5绑定mouseenter mouseleave两个事件,并为其传入附加数据data

$("body").delegate("#n5", events);

jQuery版本升级有哪些注意事项

1.使用了被废弃的jQuery.fn.live方法

jQuery Migrate库对此错误也在控制台有相应的警告:

JQMIGRATE: jQuery.fn.live() is deprecated

live方法原本的作用是设置事件代理,该方法在jQuery 1.7之后就不推荐使用了,取代之的是jQuery.fn.on函数。他们的接口分别是:

$(selector).live('click', function(){/* some code*/});$(selector).on('click', [selector,] function(){/* some code*/});

乍一看,中括号里面的参数可以省略掉,俩函数不是一模一样么?于是天真地把函数名live直接替换成on,大部分时候,这么做好像没有引起任何异常。但是如果在你调用on函数的时候,前面的$(selector)在当前的网页上根本不匹配任何元素(该元素可能是后面的代码才加到DOM里的),那是不会绑定成功的。事实上,live函数将$(selector)代理到了document元素上,这个元素是肯定存在的,所以不会出现类似情况。正确的替换方法应该是:

$(selector).live('click', function(){/* some code*/});替换为$(document).on('click', selector, function(){/* some code*/});

2.使用了被废弃的jQuery.fn.die方法

jQuery Migrate对此错误的警告是:

JQMIGRATE: jQuery.fn.die() is deprecated

这个方法和前面的live刚好反过来,取消事件处理函数的绑定。新版本中应该使用off函数代替之,替换方式类似。

3.使用了被废弃的jQuery.fn.toggle函数

jQuery Migrate对此错误的警告是:

JQMIGRATE: jQuery.fn.toggle(handler, handler...) is deprecated

早期jQuery中名字叫toggle的函数有两个,一个是用于控制元素的显示和隐藏,这个用途的函数目前jQuery中依旧存在;另一个就是上面提到的被废弃的toggle函数,它用于绑定至少两个函数到同一个元素,点击该元素的时候两个函数交替着执行。这两个同名函数功能相差甚远,为了不引起误导,在jQuery

1.8中就不再建议使用了。替换的方式是把两个函数合并成一个函数的if-else两个区段,然后自己设置一个boolean变量,控制每次点击时应该执行哪个区段即可。

4.使用了被废弃的jQuery.browser属性

jQuery Migrate对此错误的警告是:

JQMIGRATE: jQuery.browser is deprecated

在前端开发中我们经常要根据不同的浏览器版本做出不同的处理,jQuery.browser本来是通过浏览器的userAgent字段来提取浏览器相关信息的。新版本中已经将其废弃,而是建议使用特征检测的方法去判断,并且给了一个Modernizr库作为推荐。不过,改成这个库可能改动成本有点大,如果你还是想沿用jQuery.browser的思路的话,可以自己去实现一下它。例如,判断是不是IE浏览器,可以用

/msie/.test(navigator.userAgent.toLowerCase());

即自己手动获取userAgent字段,并且做一个正则表达式匹配。其他浏览器思路类似,都是对navigator.userAgent做一个正则匹配。

5.$(html)格式书写错误

在jQuery Migrate中,出现以下三种警告中的任何一种,都是属于这个错误:

JQMIGRATE:$(html) HTML strings must start with'<' characterJQMIGRATE:$(html) HTML text after last tag is ignoredJQMIGRATE: HTML string cannot start with a'#' character

这个错误还是蛮值得注意的,因为我们文章开头所说的jQuery低版本有XSS漏洞,其实就是和这个错误有关系。在javascript中我们经常会直接将一段html格式的字符串写在jQuery引用里面,比如$('<p></p>')。按照新版本的jQuery要求,这段html格式的字符串必须是以左尖括号(小于号)开头,其他字符都不可以。以下几种写法,都是错误的:

$("<p></p>");//错误,字符串最开头有一个空格,不是以小于号'<'开头的$("<p></p>test");//不标准,html标签结束后后面还有多余的"test",它会被忽略$("#<p></p>);//错误,以井号开头并且后面并不是一个css选择器

这一点在书写的时候注意一下就可以了,其实还是很容易避免的。其中第三种错误其实就不仅仅是警告了,jQuery会直接抛出一个错误,停止javascript代码的继续执行。一般情况以井号开头,例如$("#test"),其实就是一个普通的选择器,但是上面例子中后面又夹杂着html字符串,这会被jQuery判断为潜在的XSS攻击。

6. jQuery.fn.attr方法的错误使用(这是个非常易犯的错误!)

jQuery Migrate中,关于attr方法的警告有以下这些:

JQMIGRATE: jQuery.fn.attr('value', val) no longer sets propertiesJQMIGRATE: jQuery.fn.attr('value') no longer gets propertiesJQMIGRATE: jQuery.fn.attr('checked') may use property instead of attributeJQMIGRATE: jQuery.fn.attr( props, pass) is deprecated

实践中我发现,早期写的代码里面,获取一个input输入表单的值时,是怎么获取的呢?$('input').attr('value');又是怎么设置的呢?$('input').attr('value',

'helloworld')。这在新版本中都是不正确的!正确的做法应该是

$('input').val();//获取input表单现在所输入的值

$('input').val('helloworld');//设置input表单输入的值

到底是获取还是设置,只取决于调用val方法时有没有带着参数。

如果你想手动设置单选框(例如<input

type="radio">)被选中,应该怎么设置呢?老的代码里面可能会看到这样$('input').attr('checked',

true)或者$('input').attr('checked','checked')。这些现在也都是不正确的!正确的做法应该是

$('input').prop('checked', true);//把单选框设为选中状态$('input').prop('checked');//获取单选框是不是被选中了,返回true或false

这是从jQuery

1.6版本开始使用的写法。如果设置disabled和selected属性,也是使用prop方法。那到底什么时候使用attr方法呢?两者的区别是:prop设置的是某元素固有的属性,而attr设置的是写在html标签上的自定义属性。举个例子:

<input type="checkbox" checked="checked" haha="hello">var v1=$('input').prop("checked");//返回true/false,是否被选中,随状态改变而改变var v2=$('input').attr("checked");//返回"checked",这是你设置在标签上的,不会变var v3=$('input').attr("haha");//返回"hello",自定义属性var v4=$('input').prop("haha");//返回undefined,根本没有这个固有属性

上面提到的第四个错误,jQuery.fn.attr(props, pass) is deprecated这个警告在真实项目中从未见到过,看了一下源码,触发该警告的jQuery写法很少见,可忽略。

7.向$.parseJSON传入了非法的参数

在jQuery Migrate中,该错误产生如下警告

JQMIGRATE: jQuery.parseJSON requires a valid JSON string

jQuery之所以改这个接口,是为了和浏览器自带的JSON.parse接口对齐,从jQuery

1.9开始生效。这个问题常见于AJAX接收服务端返回值的时候。服务端可能返回一个空字符串,这时候调用该接口会产生错误。必须向$.parseJSON传入合法的JSON字符串。修正方法如下:

var v1=$.parseJSON(str);替换为var v1=$.parseJSON( str? str:"null");

8.使用了被废弃的'hover'事件字符串

在jQuery Migrate中该错误产生如下警告

JQMIGRATE:'hover' pseudo-event is deprecated, use'mouseenter mouseleave'

在注册事件处理函数时,'hover'以前可以看作是'mouseenter mouseleave'两个事件的别称。目前已经将该别称去掉了,所以代码中请用'mouseenter mouseleave'替换之。

9. jQuery.fn.andSelf已经被替换,不能再使用

jQuery Migrate中是这样的警告:

JQMIGRATE: jQuery.fn.andSelf() replaced by jQuery.fn.addBack()

两个函数功能是完全一样的,可以直接替换。

1. jQuery不兼容浏览器的怪异模式

这个错误的触发方式非常简单,直接把html页面最顶端的<!DOCTYPE

html>标签删掉就可以了。浏览器怪异模式是为了兼容老古董网页而设计的,详情可参考这篇文章:链接。我想现在的WEB程序员应该不会傻到不写DOCTYPE,也很少使用这种模式下的浏览器吧。

jQuery Migrate展示的错误警告如下:

2. AJAX全局事件必须绑定到document节点上

jQuery Migrate中的警告如下:

JQMIGRATE: AJAX events should be attached to document: ajaxStart

jQuery中AJAX全局事件包括如下接口ajaxStart,

ajaxStop, ajaxSend, ajaxComplete, ajaxError,

ajaxSuccess。因为这些事件使用的比较少,所以也归在少见坑当中。从jQuery

1.9开始,这些事件只能绑定到$(document)上。改正方法如下(摘自jQuery官网):

$("#status").ajaxStart(function(){$(this).text("Ajax started");});修改为$(document).ajaxStart(function(){$("#status").text("Ajax started");});

3. IE6/7/8浏览器不支持修改input表单的type属性

在jQuery Migrate中是这样的警告:

JQMIGRATE: Can't change the'type' of an input or button in IE 6/7/8

改变input的表单的type属性,你可以直接把文本框改成单选框,改成多选框等等。虽然我感觉这是一种并不算优雅的行为,但是很多浏览器都是支持这么做的,除了IE6/7/8。建议在实际中也是少用这个功能为好。

4.使用了被移除的$.clean,$.event.handle,$.attrFn,$.fn.data('events'), jQuery.event.trigger属性与方法

在jQuery Migrate中是这样的警告:

JQMIGRATE: jQuery.clean() is deprecatedJQMIGRATE: jQuery.event.handle is undocumented and deprecatedJQMIGRATE: jQuery.attrFn is deprecatedJQMIGRATE: Use of jQuery.fn.data('events') is deprecatedJQMIGRATE: Global events are undocumented and deprecated

如果你在自己的代码中使用过这五个接口,那确实是仔细研究过jQuery源代码的高人啊。因为这五个接口从来没有出现在jQuery的官方文档中,并且有些在后续版本中已经删除,可谓来无影去无踪。看源代码的话在早期版本有机会找到他们的存在,但是并不建议使用。建议采用其他方法实现相应的功能。什么?你不知道这五个函数是什么功能?那最好了,你现在也不需要知道了……

5.使用了过时的$.sub()方法

jQuery Migrate中对本问题的警告如下:

JQMIGRATE: jQuery.sub() is deprecated

这个接口非常简单,不接受任何参数。它用来创建一个jQuery的副本。该方法在jQuery 1.7版本开始就已经不再使用。

6.使用了过时的jQuery.fn.error方法

jQuery Migrate中对本问题的警告如下:

JQMIGRATE: jQuery.fn.error() is deprecated

在jQuery中,error也是和click一样的事件。注册该事件的处理函数,以前是$(selector).error(function(){}),现在已经被废弃,可以使用$(selector).on('error', function(){})来替代。

关于jquery被什么替代了的内容到此结束,希望对大家有所帮助。

java工作太难找了?java开发工资一般多少airpods3真假验证方法(怎么验证苹果耳机airpods3真假鉴别)