当前位置:首页 > JavaScript

js实现$()

2026-01-31 12:26:56JavaScript

实现类似 jQuery 的 $() 函数

在 JavaScript 中实现类似 jQuery 的 $() 函数,可以通过以下方式创建一个简化版本的选择器函数。这个函数能够根据不同的输入参数返回匹配的元素或创建新元素。

js实现$()

function $(selector, context) {
  // 如果传入的是字符串,则作为选择器处理
  if (typeof selector === 'string') {
    context = context || document;
    const elements = context.querySelectorAll(selector);
    return elements.length > 1 ? Array.from(elements) : elements[0];
  }

  // 如果传入的是函数,则在DOM加载完成后执行
  if (typeof selector === 'function') {
    if (document.readyState !== 'loading') {
      selector();
    } else {
      document.addEventListener('DOMContentLoaded', selector);
    }
    return;
  }

  // 如果传入的是DOM元素,直接返回
  if (selector instanceof HTMLElement) {
    return selector;
  }

  // 如果传入的是对象数组,返回数组
  if (Array.isArray(selector)) {
    return selector;
  }
}

功能扩展

为了更接近 jQuery 的功能,可以扩展这个基础实现:

js实现$()

function $(selector, context) {
  // 创建元素
  if (typeof selector === 'string' && selector.startsWith('<')) {
    const template = document.createElement('template');
    template.innerHTML = selector.trim();
    return template.content.firstChild;
  }

  // 选择器查询
  if (typeof selector === 'string') {
    context = context || document;
    const elements = context.querySelectorAll(selector);
    return elements.length > 1 ? Array.from(elements) : elements[0];
  }

  // DOM就绪回调
  if (typeof selector === 'function') {
    if (document.readyState !== 'loading') {
      selector();
    } else {
      document.addEventListener('DOMContentLoaded', selector);
    }
    return;
  }

  // 包装DOM元素
  if (selector instanceof HTMLElement) {
    return selector;
  }

  // 包装节点列表
  if (selector instanceof NodeList || Array.isArray(selector)) {
    return selector.length === 1 ? selector[0] : Array.from(selector);
  }
}

链式调用支持

要实现类似 jQuery 的链式调用,可以创建一个包装器类:

class JQWrapper {
  constructor(elements) {
    this.elements = Array.isArray(elements) ? elements : [elements];
  }

  addClass(className) {
    this.elements.forEach(el => el.classList.add(className));
    return this;
  }

  removeClass(className) {
    this.elements.forEach(el => el.classList.remove(className));
    return this;
  }

  css(property, value) {
    this.elements.forEach(el => el.style[property] = value);
    return this;
  }
}

function $(selector) {
  return new JQWrapper(selector);
}

使用示例

// 选择元素
$('#myElement').addClass('highlight').css('color', 'red');

// 创建元素
const newDiv = $('<div class="box">New element</div>');
document.body.appendChild(newDiv);

// DOM就绪回调
$(function() {
  console.log('DOM is ready');
});

这个实现提供了 jQuery 中最常用的 $() 函数功能,包括选择元素、创建元素和DOM就绪回调。可以根据需要进一步扩展功能。

标签: js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…