首页 > 解决方案 > jQuery 如何在后台实现 before 方法?

问题描述

我们怎么可能将带有 HTML 标记的字符串传递给jQuery 的 .before方法并成功构建元素?是否有一些隐藏的逻辑以某种方式扫描字符串并使用 .createElement 将其构建到实际节点中?当我试图在 jQuery 中找到这个字符串到节点逻辑时,我什么也没找到。请参阅下面的更多细节。

.before 方法实现与未缩小的 Jquery 3.6.6 中的完全一样 - https://code.jquery.com/jquery-3.6.0.js

jquery中声明的before方法截图

我从中了解到的是,他们调用了 .insertBefore 方法,它是 vanilla javascript。

但是 insertBefore 需要一个节点 - 这意味着您必须执行 document.createElement 来创建它,文档如下:

let insertedNode = parentNode.insertBefore(newNode, referenceNode)
//insertedNode = The node being inserted (the same as newNode)

来自 .insertBefore 的 MDN 文档 - https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore

那么,为什么 jQuery 让我们调用.before('<p>Test</p>')并且它可以工作,即使看起来 jQuery 没有使用 .createElement 构建节点?

我希望在 jQuery 中找到类似下面的代码

//somehow dynamically get tagName + textValue
var tag = document.createElement(tagName); //'p'
tag.innerText = "textValue //'Test'

jQuery .before 方法会使用它,但我什么也没找到。

我确实在他们的代码中找到了 jQuery.parseHTML 函数,这是他们使用 createElement 动态创建节点的唯一函数,但是这个函数并没有被 before 方法使用,所以 .before 方法如何能够获取字符串 HTML作为参数并在实现中没有这样的逻辑时成功将其转换为节点?

标签: jquery

解决方案


推荐阅读