- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
通过 jQuery ,我可以使用 $(sel).html(html)
生成一个 html 区域。
没有 jquery ,我可以通过 dom.innerHTML = html;
做同样的事情我还发现 $(sel).html()
比 dom.innerHTML
慢,但为什么呢?
$(sel).html
和 dom.innerHTML
有什么区别?
使用 dom.innerHTML
替换 $(sel).html
是否安全?
最佳答案
使用 .html()
设置 HTML 提供了一些适当的内务处理,以防止在设置 .innerHTML
之前使用其他 jQuery 功能时发生内存泄漏。
例如,如果您在一个元素上使用 .data()
并且您为您使用的对象的父对象分配 .innerHTML
.data( )
上,然后 .html()
将清除与被替换元素关联的 .data()
元素。如果您使用 .innerHTML
,那些 .data()
元素将被孤立并且在您离开页面之前永远不会被清理(短期内存泄漏)。与已移除对象的事件处理程序关联的一些 jQuery 数据也是如此。
在 jQuery 中编程最安全的方法是在删除时使用 .remove()
和 .html()
(或其他类似的 jQuery 函数)而不是原生 DOM 函数您使用过 jQuery 的元素。
.html()
可能更慢,因为它做的更多(如果使用其他 jQuery 功能,其中一些是有利的)。
实际上,如果您直接在元素的父元素上使用 .innerHTML
可能会发生内存泄漏,而您一直在这些元素上使用其他 jQuery 功能,这通常不是问题。它们可能有意义的地方是,如果您有与元素关联的大型数据结构(如 .data()
),或者如果您创建和销毁大量元素,或者如果您打算为您的页面运行很长时间(如单页应用程序)。因此,如果您想要安全起见,请坚持使用 jQuery 方法来处理任何可以删除或替换元素的方法。
这是一个简单的内存泄漏示例:
<div id="container"><span id="whatever">foo</span></div>
$("#whatever").data("somedata", "really long string");
document.getElementById("container").innerHTML = "<span>new text</span>";
这会导致在第一行代码中设置的 .data()
信息泄漏,因为 jQuery 永远没有机会清理与现在已被删除的 #whatever 对象关联的数据来自 DOM,但 jQuery 从未发现您删除了它。
然而,这不会以那种方式泄漏:
<div id="container"><span id="whatever">foo</span></div>
$("#whatever").data("somedata", "really long string");
$("#container").html("<span>new text</span>");
关于jquery - $(sel).html 和 dom.innerHTML 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14051479/
我已经使用它们很长一段时间了,但大多数时候,我更喜欢较短的,但是,我只是想真正深入了解本质细节。我可能一直在创建有错误的代码,并且我不想在网络上贡献和传播懒惰完成的代码。 所以,告诉我: What a
我似乎无法正常工作,我想检查是否选择了 AM-1 路线,然后是否也选择了值“1vlucht”并相应地更改 innerHTML。这可能吗?我也尝试过 && 但没有运气。 我什至不确定你是否可以为 1 个
您建议如何处理此错误? Actor 阵容是否必要第一名? - (NSMethodSignature*)methodSignatureForSelector:(SEL)selector { retu
从 objc 源代码我们可以看到 SEL 被定义为 typedef struct objc_selector *SEL; 我用 idaq 反汇编了我的 dylib ,我确实调用了 _MSHookMes
我有以下 XML 我确实从属性中获得了正确的值,但我想用新行将它们分开以进行进一步处理。 使用命令时 xmlstarlet sel -t -v "count(process/@id" "exa
我想将选择器添加到 NSMutableArray。但由于它们是不透明类型并且没有对象,所以这是行不通的,对吧?有我可以使用的包装对象吗?还是我必须创建自己的? 最佳答案 您可以将其包装在 NSValu
我正在尝试让另一个对象调用选择器。我试图通过定义选择器属性从另一个类定义这个选择器。它似乎没有像我预期的那样工作。 组合框.h @property (nonatomic) SEL onComboSel
当你只有一个 SEL 对象时,似乎应该有一种简单的方法来调用带有一些参数的选择器。我似乎找不到正确的语法。 -(MyClass*) init: (SEL)sel owner:(NSObject*) p
命令 $ xmlstarlet sel -t -c "/collection/record" file.xml 似乎在应用给定的 Xpath 表达式之前将整个文件加载到内存中。这不适用于大型 XML
我刚刚在在线教程中发现了以下内容。它显示 001 作为分配选择器的方法,但是我无法让它工作。我是否正确地认为 001 不对,002 是正确的方法,还是我对 001 做错了什么? // 001 SEL
带有选择标签的 HTML: ` 在 JavaScript 部分,我试图在选择下拉列表中添加选项,在循环中创建它们,将数组值分配给选项: var sel = document.getElementByI
我的 PHP 代码有问题。在前一页中,用户输入他们的用户名。现在,当他们提交表单时,用户名会发布并回显在当前页面上。 例如,如果教师输入“j.lu”作为用户名,它会在当前页面上发布“j.lu”。 但我
我只是好奇是否有办法动态提取 SEL 名称? 不确定如何提取 SEL,因为它是一个 typedef 结构。 谢谢。 最佳答案 请详细说明。但是,我相信您正在尝试将 SEL 转换为 NSString。如
我有一个来自字符串的 SEL。我可以使用“method_copyArgumentType”,这是一个运行时函数来获取每个参数的类型,就像这样 char *arguType = method_copyA
当我将一个选择器传递给我的方法时,我是否应该只保存它: -(void) setCallBack:(SEL) selectorToCall { self->mSelectorToCall = s
我最近阅读了由受人尊敬的 Bryan Oakley( Tkinter adding line number to text widget ) 撰写的答案,他在其中展示了有关解决问题的示例代码。 当我尝
我正在设置一个表格,格式如下。请原谅愚蠢的示例数据。所有这些实际上都是用 json 加载的,但输出如下所示: It was the best of times, it was the worst o
我有一个 appDelegate,它初始化了一个名为 LocationService 的类的实例。 我只想通过 init 传递给这个实例这个类将运行的方法。 我得到了这个异常(exception):
Perl-Selenium 还提供了 Test::More 的标准方法,例如 ok()、like()、is() 等,也作为对象方法,例如$sel->like()。 ($sel 是 selenium p
例如,我想跟踪发送到我的 canPeformAction 的操作,但它们数量太多,无法在调试器中通过“悬停”在每次出现时显示。因此,我想在我的测试周期后跟踪日志并检查它。 - (BOOL)canPer
我是一名优秀的程序员,十分优秀!