当前位置:首页 > JavaScript

js 实现$方法

2026-04-07 01:58:19JavaScript

实现 $ 方法

在 JavaScript 中实现类似 jQuery 的 $ 方法,可以通过创建一个函数来简化 DOM 操作。以下是一个基本的实现方式:

function $(selector) {
  const elements = document.querySelectorAll(selector);
  return elements.length === 1 ? elements[0] : elements;
}

扩展功能

为了更接近 jQuery 的功能,可以扩展 $ 方法,使其支持 DOM 操作和事件绑定:

function $(selector) {
  const elements = document.querySelectorAll(selector);

  const api = {
    elements,
    css: function(property, value) {
      this.elements.forEach(el => {
        el.style[property] = value;
      });
      return this;
    },
    on: function(event, callback) {
      this.elements.forEach(el => {
        el.addEventListener(event, callback);
      });
      return this;
    }
  };

  return api;
}

链式调用

通过返回 this,可以实现链式调用:

$('.my-class')
  .css('color', 'red')
  .on('click', () => console.log('Clicked'));

创建元素

支持通过字符串创建新元素:

function $(selector) {
  if (selector.startsWith('<') && selector.endsWith('>')) {
    const el = document.createElement(selector.slice(1, -1));
    return {
      element: el,
      appendTo: function(parent) {
        document.querySelector(parent).appendChild(this.element);
        return this;
      }
    };
  }
  // 其他实现...
}

完整示例

结合以上功能,以下是一个更完整的实现:

js 实现$方法

function $(selector) {
  if (selector.startsWith('<') && selector.endsWith('>')) {
    const el = document.createElement(selector.slice(1, -1));
    return {
      element: el,
      appendTo: function(parent) {
        document.querySelector(parent).appendChild(this.element);
        return this;
      },
      attr: function(name, value) {
        this.element.setAttribute(name, value);
        return this;
      }
    };
  }

  const elements = document.querySelectorAll(selector);

  const api = {
    elements,
    css: function(property, value) {
      this.elements.forEach(el => {
        el.style[property] = value;
      });
      return this;
    },
    on: function(event, callback) {
      this.elements.forEach(el => {
        el.addEventListener(event, callback);
      });
      return this;
    },
    addClass: function(className) {
      this.elements.forEach(el => {
        el.classList.add(className);
      });
      return this;
    }
  };

  return api;
}

使用示例

$('<div>')
  .attr('id', 'new-div')
  .appendTo('body');

$('#new-div')
  .css('background', 'blue')
  .addClass('highlight')
  .on('mouseover', () => console.log('Mouse over'));

这种方法提供了基本的 DOM 操作和事件绑定功能,可以根据需要进一步扩展。

标签: 方法js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…