【面试】web前端经典面试题试题及答案-jQuery
jquery的jq.eq(0)和jq[0]有什么区别? |
待完善
原型实际应用-jquery? |
多个实例都可以共用一个方法时,说明这些方法(eg:css(), html())都是来自于一个构造函数的原型中
var $p = $('p');
$p.css('color', 'red'); // css是原型方法
console.log($p.html()); // html是原型方法 // 如果有多个p元素,$p.html()默认是最后一个元素的html
<body>
<div>
<p>段落1</p>
<p>段落2</p>
</div>
<!--<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>-->
<script>
(function(window) {
var jQuery = function(selector) {
return new jQuery.fn.init(selector); // new了一个构造函数的实例
};
jQuery.fn = {
css: function(key, value) {
},
html: function(value) {
return '这是html';
}
};
var init = jQuery.fn.init = function(selector) { // 构造函数
var slice = Array.prototype.slice;
// var dom = document.querySelectorAll(selector); // nodeList[p,p]:__proto__是nodeList
var dom = slice.call(document.querySelectorAll(selector)); // [p, p]:__proto__是Array // selector转换成dom的list,然后转换成数组
console.log(dom);
var i, len = dom ? dom.length : 0;
for (i = 0; i < len; i++) {
this[i] = dom[i]; // 所有的元素都变成实例的属性
}
this.length = len;
this.selector = selector || '';
};
init.prototype = jQuery.fn; // 构造函数的原型赋值成jQuery.fn,jQury.fn是一个js对象
window.$ = jQuery;
})(window);
$p = $('p'); // 初始化实例
console.log($p.html());
1、扩展原型
将getNodeName属性放在构造函数的原型中,不是直接给构造函数的原型赋值,而是通过$.fn赋值
$.fn.getNodeName = function() {
return this[0].nodeName; // this[0]可以得到上述的第一个p标签,this就是实例$p,init这个构造函数里创建了this[i];
}
(1)好处:
①只有$
会暴露在window全局变量(只暴露一个变量,不然容易造成全局变量的污染)
②将插件扩展统一到$.fn.xxx这一个接口,方便使用。
jquery和vue的区别? |
1、数据和视图的分离,解耦,开发封闭原则(对扩展开放、对修改封闭)
2、vue:以数据驱动视图,只关心数据变化,dom操作被封装
jQuery 库中的 $() 是什么? |
$()
函数是 jQuery() 函数的别称。$() 函数用于将任何对象包裹成 jQuery 对象,接着你就被允许调用定义在 jQuery 对象上的多个不同方法。
你甚至可以将一个选择器字符串传入 $() 函数,它会返回一个包含所有匹配的 DOM 元素数组的 jQuery 对象。
$(document).ready() 是个什么函数?为什么要用它? |
ready() 函数用于在文档进入ready状态时执行代码。当DOM 完全加载(例如HTML被完全解析DOM树构建完成时),jQuery允许你执行代码。
使用$(document).ready()的最大好处在于它适用于所有浏览器,jQuery帮你解决了跨浏览器的难题。
JavaScript window.onload 事件和 jQuery ready 函数有何不同? |
JavaScript window.onload 除了要等待 DOM 被创建还要等到包括大型图片、音频、视频在内的所有外部资源都完全加载。如果加载图片和媒体内容花费了大量时间,用户就会感受到定义在 window.onload 事件上的代码在执行时有明显的延迟。
另一方面,jQuery ready() 函数只需对 DOM 树的等待,而无需对图像或外部资源加载的等待,从而执行起来更快。使用 jQuery $(document).ready() 的另一个优势是你可以在网页里多次使用它,浏览器会按它们在 HTML 页面里出现的顺序执行它们,相反对于 onload 技术而言,只能在单一函数里使用。鉴于这个好处,用 jQuery ready() 函数比用 JavaScript window.onload 事件要更好些。
网页上有 5 个 <div> 元素,如何使用 jQuery来选择它们 |
jQuery 支持不同类型的选择器,例如 ID 选择器、class 选择器、标签选择器。鉴于这个问题没提到 ID 和 class,你可以用标签选择器来选择所有的 div 元素。jQuery 代码:$(“div”),这样会返回一个包含所有 5 个 div 标签的 jQuery 对象。
jQuery 里的 ID 选择器和 class 选择器有何不同 |
ID 选择器使用 ID 来选择元素,比如 #element1,而 class 选择器使用 CSS class 来选择元素。当你只需要选择一个元素时,使用 ID 选择器,而如果你想要选择一组具有相同 CSS class 的元素,就要用 class 选择器
如何找到所有 HTML select 标签的选中项? |
你能用下面的 jQuery 选择器获取所有具备 multiple=true 的 标签的选中项:
$('[name=NameOfSelectedTag] :selected')
这段代码结合使用了属性选择器和 :selected 选择器,结果只返回被选中的选项。你可按需修改它,比如用 id 属性而不是 name 属性来获取 标签。
你是如何将一个 HTML 元素添加到 DOM 树中的?? |
你可以用 jQuery 方法 appendTo() 将一个 HTML 元素添加到 DOM 树中。这是 jQuery 提供的众多操控 DOM 的方法中的一个。你可以通过 appendTo() 方法在指定的 DOM 元素末尾添加一个现存的元素或者一个新的 HTML 元素。
你能用 jQuery 代码选择所有在段落内部的超链接吗? |
你可以使用下面这个 jQuery 代码片段来选择所有嵌套在段落(<p>
标签)内部的超链接(<a>
标签)$( 'p a' );
如何在点击一个按钮时使用 jQuery 隐藏一个图片? |
jQuery为按钮点击之类的事件提供了很好的支持。你可以通过以下代码去隐藏一个通过ID或class定位到的图片。你需要知道如何为按钮设置事件并执行hide() 方法。
代码如下所示:
$('#ButtonToClick').click(function(){
$('#ImageToHide').hide();
});
jQuery 里的 each() 是什么函数?你是如何使用它的? |
each() 函数就像是 Java 里的一个 Iterator,它允许你遍历一个元素集合。你可以传一个函数给 each() 方法,被调用的 jQuery 对象会在其每个元素上执行传入的函数。有时这个问题会紧接着上面一个问题,举个例子,如何在 alert 框里显示所有选中项。我们可以用上面的选择器代码找出所有选中项,然后我们在 alert 框中用 each() 方法来一个个打印它们,代码如下:
$('[name=NameOfSelectedTag] :selected').each(function(selected) {
alert($(selected).text());
});
其中 text() 方法返回选项的文本。
$(this) 和 this 关键字在 jQuery 中有何不同? |
$(this) 返回一个 jQuery 对象,你可以对它调用多个 jQuery 方法,比如用 text() 获取文本,用val() 获取值等等。而 this 代表当前元素,它是 JavaScript 关键词中的一个,表示上下文中的当前 DOM 元素。你不能对它调用 jQuery 方法,直到它被 $() 函数包裹,例如 $(this)。
你如何使用jQuery来提取一个HTML 标记的属性 例如. 链接的href? |
attr() 方法被用来提取任意一个HTML元素的一个属性的值. 你首先需要利用jQuery选择及选取到所有的链接或者一个特定的链接,然后你可以应用attr()方法来获得他们的href属性的值。下面的代码会找到页面中所有的链接并返回href值:
$('a').each(function(){
alert($(this).attr('href'));
});
你如何使用jQuery设置一个属性值? |
1、对象.attr(“name”,“value”);name是属性的名称,value是这个属性的新值
2、对象.prop(“name”,“value”);
3、设置多个属性值:对象.attr(“name”:“value”,“name”:“value”)属性:属性值,属性:属性值
jquery中attr和prop的区别? |
1、对于html元素本身就带有的固定属性(本身就带有的属性),在处理时,使用prop方法,可以操作布尔类型的属性
2、对于html元素我们自己定义的dom属性,在处理时,使用attr方法,不可以操作布尔类型的属性<a href = "#" id="link1" class="btn" action="delete">删除</a>
这个例子里的<a>
元素的dom属性值有"id、href、class和action",很明显,前三个是固有属性,而后面一个action属性是我们自己定义上去的<a>
元素本身是没有属性的。这种就是自定义的dom属性。处理这些属性时,建议使用attr方法,使用prop方法对自定义属性取值和设置属性值时,都会返回undefined值。
像checkbox,radio和select这样的元素,选中属性对应“checked”和"selected",这些也属于固有属性,因此需要使用prop方法去操作才能获取正确答案
jQuery中 detach() 和 remove() 方法的区别是什么 |
尽管 detach() 和 remove() 方法都被用来移除一个DOM元素, 两者之间的主要不同在于 detach() 会保持对过去被解除元素的跟踪, 因此它可以被取消解除, 而 remove() 方法则会保持过去被移除对象的引用. 你也还可以看看 用来向DOM中添加元素的 appendTo() 方法.
你如何利用jQuery来向一个元素中添加和移除CSS类? |
通过利用 addClass() 和 removeClass() 这两个 jQuery 方法。动态的改变元素的class属性可以很简单。例如. 使用类“.active"来标记它们的未**和**状态,等等
.addClass("类名") // 添加元素
.remove() // 删除样式类
使用 CDN 加载 jQuery 库的主要优势是什么? |
除了报错节省服务器带宽以及更快的下载速度这许多的好处之外, 最重要的是,如果浏览器已经从同一个CDN下载类相同的 jQuery 版本, 那么它就不会再去下载它一次. 因此今时今日,许多公共的网站都将jQuery用于用户交互和动画, 如果浏览器已经有了下载好的jQuery库,网站就能有非常好的展示机会。
jQuery.get() 和 jQuery.ajax() 方法之间的区别是什么? |
ajax() 方法更强大,更具可配置性,让你可以指定等待多久,以及如何处理错误。get() 方法是一个只获取一些数据的专门化方法。
jQuery 中的方法链是什么?使用方法链有什么好处? |
方法链是对一个方法返回的结果调用另一个方法,这使得代码简洁明了,同时由于只对 DOM 进行了一轮查找,性能方面更加出色。
你要是在一个 jQuery 事件处理程序里返回了 false 会怎样? |
这通常用于阻止事件向上冒泡。
哪种方式更高效:document.getElementbyId(“myId”) 还是 $("#myId")? |
document.getElementById(‘myId’)更高效,因为它直接调用了JavaScript引擎