如何将用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的新手,所以我发现自己在这一步几乎陷入了困境...任何帮助将不胜感激! :)
答案 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(){ //... })