这个jquery代码是如何工作的
How does this jquery code work?
(很抱歉标题不好,我想不出更好的了)
我最近了解到,你可以在jquery中做这样的事情:
$("<div><span>content</span></div>").css("color", "red").appendTo("body");
我的问题是关于以下内容:
$("<div><span>content</span></div>")
jquery如何将其从字符串转换为dom元素,以及如何在vanillajs(没有jquery)中做同样的事情?
我试着浏览jquery的源代码,但我并没有真正理解它
非常感谢您的解释!
纯javascript中的等价物是
var newDiv = document.createElement("DIV");
newDiv.style.color = "red";
var newSpan = document.createElement("SPAN");
newSpan.innerHTML = "content";
newDiv.appendChild(newSpan);
document.body.appendChild(newDiv);
jquery通过定义可链接的函数来简化这一点,这意味着下一个函数使用前一个函数的返回值作为其输入,因此在您的示例中,它将css添加到html代码中,然后将所有代码添加到主体
<div><span>content</span></div>
创建的DOM元素的引用。
jQuery所做的一件非常有用的事情是,每次调用jQuery或其任何API方法都会返回新创建的jQuery实例或当前jQuery实例。这样做的好处是,您可以将调用链接起来以转换一组DOM元素。
在这种情况下,$(...)
返回一个jQuery实例,该实例包含要操作的DOM元素。接下来,您链接了css()
,它为该元素添加了样式属性。最后,您将appendTo()
链接到一个目标DOM元素中。在这种情况下,该目标是<body>
元素。
以下是这个过程在JavaScript:中(大致)的样子
首先,我们需要创建要插入的DOM元素。
var node = document.createElement("div");
node.innerHTML = "<div><span>content</span></div>";
var myElement = node.children[0];
然后我们将设置样式属性。
myElement.style.color = "red";
最后,让我们将它附加到现有元素中。
document.body.appendChild(myElement);
从字符串创建DOM元素是通过innerHTML
属性的魔力实现的。当JavaScript解析器遇到一个字符串被设置为元素innerHTML
时,它会将该字符串解析为DOM元素,并将这些元素作为子元素插入。
因此,jQuery在后台所做的是创建一个伪元素,将您提供的字符串设置为伪元素innerHTML
属性的值。这导致创建DOM元素并将其作为伪元素的子元素插入。最后,它检索对children元素(您想要的元素)的引用。
这一行从html字符串创建一个jQuery包装的对象,本质上是创建一个包含span
的div
,其文本是单词content
:
$("<div><span>content</span></div>")
这将CSS
属性应用于创建的元素,告诉它以红色显示文本:
.css("color", "red")
这将创建和样式化的元素添加到body
标签末尾的DOM
中:
.appendTo("body");
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- 在JavaScript中的类中,push和concat的工作方式有何不同
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)