美文网首页
简单实现一个jQuery的API

简单实现一个jQuery的API

作者: 猫晓封浪 | 来源:发表于2018-08-16 21:08 被阅读0次

要实现的目标:使页面中所有的div添加一个class和改变div的textContent。我们给每个div加个名为“red”的类名,将div的textContent内容更改为“hi”。
通过以下步骤更加深刻理解。
Html代码:

  <div>内容1</div>
  <div>内容2</div>
  <div>内容3</div>
  <div>内容4</div>
使用DOM实现
var divs=document.getElementsByTagName("div")
for(var i=0;i<divs.length;i++){
  divs[i].classList.add("red")
  divs[i].textContent="hi"
}

我们可以将上述代码封装到函数中,我们再去调用的时候就很容易实现不需要再去重新声明。

function addClass(node,classes){
  var divs=document.getElementsByTagName(node)
  for(var i=0;i<divs.length;i++){
    divs[i].classList.add(classes)
  }
}
function setText(node,text){
  var divs=document.getElementsByTagName(node)
  for(var i=0;i<divs.length;i++){
    divs[i].textContent=text
  }
}

但是现在还不是最简单的,其他人也无法使用,也容易引起方法名的冲突,所以这个时候我们就需要命名空间来解决这个问题,代码结构会更加清晰。

var hjdom={}
hjdom.addClass=addClass
hjdom.setText=setText

这个时候我们再去实现这个功能的话。

hjdom.addClass("div","red")
hjdom.setText("div","hi")

这样是很方便,但是对于对于使用者来说还不是最简便的。
我们可以将这个方法添加到内置的Node对象原型中,但是不推荐使用,因为可能会对内置的对象原型会产生影响。

Node.prototype.addClass=function (node,classes){
  var divs=document.getElementsByTagName(node)
  for(var i=0;i<divs.length;i++){divs[i].classList.add(classes)}
}
Node.prototype.setText=function (node,text){
  var divs=document.getElementsByTagName(node)
  for(var i=0;i<divs.length;i++){divs[i].textContent=text}
}
Node.prototype.addClass("div","red")
Node.prototype.setText("div","hi")

既然会对内置对象原型产生影响,所以可以在新的接口中去设置。这种方法叫做无侵入

function Node2(node){
     return {
       element: node,
         addClass: function (classes){
  var divs=document.getElementsByTagName(node)
  for(var i=0;i<divs.length;i++){divs[i].classList.add(classes)}
    },
         setText: function (text){
  var divs=document.getElementsByTagName(node)
  for(var i=0;i<divs.length;i++){divs[i].textContent=text}
    }
     }
 }

var node2=Node2("div")
node2.addClass("red")
node2.setText("hi")

既然可以进行上边的操作,那我们同样的可以给Node2改个名字,然后在进行一个缩写,就得到以下代码。

window.jQuery =function (node){
     return {
       element: node,
         addClass: function (classes){
  var divs=document.getElementsByTagName(node)
  for(var i=0;i<divs.length;i++){divs[i].classList.add(classes)}
            },
         setText: function (text){
  var divs=document.getElementsByTagName(node)
  for(var i=0;i<divs.length;i++){divs[i].textContent=text}
                }
    }
 }
window.$ = jQuery

这个时候我们再要去使用我们的两个API就要使用以下代码。

var $div = $('div')
$div.addClass('red') 
$div.setText('hi')

可以做到同样的效果。我们使用旧的DOM的API创造新的API,来实现旧API很难实现的过程。

相关文章

  • 如何实现一个jQuery的api

    什么是jQuery 实现jQuery的api 实现jQuery的api说起来也很简单,就是对DOM进行封装。话不多...

  • 用原生DOM实现一个jQuery的API

    今天第一次接触jQuery,先简单的实现一个jQuery的API,实现两个方法: addClass() setTe...

  • 简单实现jQuery API

    具体的思路:1.封装一个函数,传入节点或者选择器字符串,可以返回伪数组,伪数组中包含获取到的dom元素==> 对函...

  • 初探jQuery

    jQuery API的实现 自己模拟jQuery的一个API预览:http://js.jirengu.com/pa...

  • 实现一个 jQuery 的 API

    实现一个 jQuery 的 API 实现步骤 命名空间模式 这个模式的调用为jQuery.addClass(ite...

  • 实现一个简单jQuery的API

    jQuery的基本设计思想和主要用法,就是"选择某个网页元素,然后对其进行某种操作"。使用jQuery的第一步,往...

  • jQuery 一个简单API的实现

    需求:写一个jQuery函数,函数的功能如下面描述。传入选择器,为所有符合条件的元素添加样式或改变文本内容。 实现...

  • 简单实现一个jQuery的API

    要实现的目标:使页面中所有的div添加一个class和改变div的textContent。我们给每个div加个名为...

  • 简单实现一个 jQuery 的 API

    一、先总体构建出函数如下 二、获得函数要操作的对象,保持输出结果一致 给node的添加class属性,用forEa...

  • 一个简单jquery api的实现

    如下的代码结构: 需求如下: 思路分析 写一个方法 ,找到这个节点写一个 addClass方法,给节点添加样式写一...

网友评论

      本文标题:简单实现一个jQuery的API

      本文链接:https://www.haomeiwen.com/subject/sktabftx.html