欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【面试】web前端经典面试题试题及答案-jQuery

程序员文章站 2022-04-19 15:33:44
...

jquery的jq.eq(0)和jq[0]有什么区别?

待完善

  • jQuery源码

原型实际应用-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 属性来获取 标签。


  • dom操作

你是如何将一个 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引擎