将jQuery函数转换为纯JavaScript

时间:2019-08-13 08:44:11

标签: javascript jquery

如何将用JQuery编写的代码转换为仅JS?

原始代码:

$('.abcClass').each(function () {
    $(this).html($(this).text().replace(/([^\x00-\x80]|\w)/g, "<span class='mail'>$&</span>"));
});

我试图这样写:

document.querySelectorAll('.abcClass').forEach(function (comment) {
    comment.innerHTML(comment.toString().replace(/([^\x00-\x80]|\w)/g, "<span class='mail'>$&</span>"));
});

但是我收到了错误:

Uncaught TypeError: comment.innerHTML is not a function
Uncaught TypeError: Cannot read property 'classList' of null

我是jQuery的新手,所以我发现自己在这一步几乎陷入了困境...任何帮助将不胜感激! :)

2 个答案:

答案 0 :(得分:5)

虽然.innerHTML 下面的一个函数,但它是一个setter(和getter),因此您必须像设置普通属性值一样设置和检索其值:

comment.innerHTML = comment.innerHTML
  .replace(/([^\x00-\x80]|\w)/g, "<span class='mail'>$&</span>"));

还请记住,querySelectorAll返回一个NodeList,而NodeLists在更新的浏览器(2016年中左右)中仅具有forEach方法。为了获得更好的向后兼容性,请考虑调用Array.prototype.forEach

Array.prototype.forEach.call(
  document.querySelectorAll('.abcClass'),
  function(comment) {
    // ...

(肯定您也可以事先做NodeList.prototype.forEach = Array.prototype.forEach,但这对我来说真的很奇怪)

答案 1 :(得分:0)

代替使用jquery UPDATE T SET name = TableName + CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS varchar(20)) FROM TableName T

.each()

使用document.querySelectorAll(),然后将HTMLCollection转换为JavaScript数组。然后,您可以映射元素数组。

$('div').each(function(){ //... })