当前位置:首页 > JavaScript

js 实现 jq

2026-01-31 15:29:14JavaScript

实现 jQuery 核心功能

jQuery 是一个流行的 JavaScript 库,简化了 DOM 操作、事件处理和 Ajax 请求。以下是一个简化版的 jQuery 实现,涵盖核心功能。

选择器功能

function $(selector) {
  if (selector.startsWith('<')) {
    // 创建元素
    const tagName = selector.replace(/[<>]/g, '')
    return document.createElement(tagName)
  } else {
    // 选择元素
    const elements = document.querySelectorAll(selector)
    return elements.length === 1 ? elements[0] : Array.from(elements)
  }
}

DOM 操作方法

$.fn = {
  html: function(content) {
    if (content === undefined) {
      return this.innerHTML
    }
    this.innerHTML = content
    return this
  },

  text: function(content) {
    if (content === undefined) {
      return this.textContent
    }
    this.textContent = content
    return this
  },

  attr: function(name, value) {
    if (value === undefined) {
      return this.getAttribute(name)
    }
    this.setAttribute(name, value)
    return this
  }
}

// 将方法附加到选择结果上
function $(selector) {
  const elements = document.querySelectorAll(selector)
  const result = elements.length === 1 ? elements[0] : Array.from(elements)

  Object.keys($.fn).forEach(method => {
    if (result[method]) return
    if (Array.isArray(result)) {
      result[method] = function(...args) {
        return result.map(el => $.fn[method].apply(el, args))
      }
    } else {
      result[method] = function(...args) {
        return $.fn[method].apply(result, args)
      }
    }
  })

  return result
}

事件处理

$.fn.on = function(eventName, handler) {
  this.addEventListener(eventName, handler)
  return this
}

$.fn.off = function(eventName, handler) {
  this.removeEventListener(eventName, handler)
  return this
}

Ajax 功能

$.ajax = function(options) {
  const xhr = new XMLHttpRequest()
  xhr.open(options.method || 'GET', options.url, true)

  if (options.headers) {
    Object.keys(options.headers).forEach(key => {
      xhr.setRequestHeader(key, options.headers[key])
    })
  }

  xhr.onload = function() {
    if (xhr.status >= 200 && xhr.status < 300) {
      options.success && options.success(xhr.response)
    } else {
      options.error && options.error(xhr.statusText)
    }
  }

  xhr.onerror = function() {
    options.error && options.error(xhr.statusText)
  }

  xhr.send(options.data)
}

链式调用支持

所有方法都返回 this,支持链式调用:

$('#myElement')
  .html('Hello')
  .attr('data-test', 'value')
  .on('click', () => console.log('Clicked'))

动画基础实现

$.fn.animate = function(properties, duration, callback) {
  const element = this
  const startTime = performance.now()
  const startValues = {}

  Object.keys(properties).forEach(prop => {
    startValues[prop] = parseFloat(getComputedStyle(element)[prop])
  })

  function step(currentTime) {
    const elapsed = currentTime - startTime
    const progress = Math.min(elapsed / duration, 1)

    Object.keys(properties).forEach(prop => {
      const start = startValues[prop]
      const end = parseFloat(properties[prop])
      const current = start + (end - start) * progress
      element.style[prop] = current + (prop === 'opacity' ? '' : 'px')
    })

    if (progress < 1) {
      requestAnimationFrame(step)
    } else if (callback) {
      callback()
    }
  }

  requestAnimationFrame(step)
  return this
}

使用方法示例

// 选择元素
const elements = $('.my-class')

// 修改内容
$('#myId').html('<p>New content</p>')

// 添加事件
$('#btn').on('click', () => alert('Clicked!'))

// Ajax 请求
$.ajax({
  url: '/api/data',
  method: 'GET',
  success: data => console.log(data),
  error: err => console.error(err)
})

// 动画效果
$('.box').animate({
  left: '100px',
  opacity: 0.5
}, 1000)

这个实现包含了 jQuery 的核心功能,包括选择器、DOM 操作、事件处理、Ajax 和动画。可以根据需要进一步扩展功能。

js 实现 jq

标签: jsjq
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div c…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…