gpt4 book ai didi

javascript - HTML:onload 非 body 元素

转载 作者:太空狗 更新时间:2023-10-29 14:51:57 28 4
gpt4 key购买 nike

我通过 JQuery 对大量元素执行 javascript 转换的常规方式:

<div class="cow"></div>
<script> $(".cow").doStuff() </script>

但是,此操作非常脆弱:它假设页面只加载一次。一旦开始使用 Ajax 和部分重新加载,这种全局转换就会完全崩溃。如果服务器想要根据某些服务器端数据对每个元素进行不同的转换,它也不起作用。

我知道实际的onloadbody 事件元素不起作用。一种解决方案是为所有元素提供 ID/类并使用 JQuery 立即引用它们:

<div id="cow"></div>
<script> $("#cow").doStuff() </script>

但是,那真的很乱;我一点也不喜欢它,部分原因是我赋予 ID 的每个元素都会污染全局 I 命名空间。我目前正在为该元素提供一个有效的不可碰撞 ID

<div id="id877gN0icYtxi"></div>
<script> $("#id877gN0icYtxi").doStuff() </script>

基于随机 base64 数字。然而,这一切似乎都是一个巨大的破解:我可以给出元素 onclick s 和 onmousedown s 等非常简单地使用它们各自的属性,然后调用一个函数来转换给定的 this .

现在,我知道onload不起作用。但是,有没有办法模拟它的功能呢?具体来说,我希望能够使用 this 运行引用特定标签的 javascript 代码。无需为标签分配 ID。

编辑:本质上我想要类似的东西

<input onclick="alert('moo')"/>

但是对于oncreate;我当前的用例是填写 inputtextarea带有文字,我目前正在做:

<input id="id877gN0icYtxi"/>
<script>$("#id877gN0icYtxi").val(...)</script>

哪里...对于每个输入框都是不同的,因此不能使用“全局”jquery 转换轻松完成。另一方面,我不能只设置 valueinput 的属性当我创建它时,它可能是一个 textarea ,我不知道。我想做类似的事情:

<input onload="$(this).val(...)"/>

这行不通,但我希望它行得通。同样,...由服务器设置并且每个 input 都不同页面上的标记。

编辑2:

我很清楚小时 JQuery 通常用于以相同的方式对大量元素执行整个文档转换。问题在于,在这种情况下,每个元素都以特定于该元素的方式进行转换,由服务器指定。具体用例是每个字段的内容由 $().val() 预先填写,自然每个字段都会填入不同的内容。为每个元素赋予一个唯一 ID 并使用 JQuery 进行全局搜索以再次找到该元素似乎是一种令人难以置信的迂回方式,当然,当您在页面中开始 Ajaxing 部分时会中断出。

编辑3:

简而言之,我希望能够写作

<div onload="javascriptFunction(this)"/>

并且有javascriptFunction()<div> 时运行已创建(无论是在初始页面上还是通过 ajax 插入)并传递给 <div>作为参数。正如onclick会运行javascriptFunction()<div>作为单击 div 时的参数,我希望发生同样的事情,但是当 <div>被创建/插入到 DOM 中。

我愿意接受 <head> 中的任何数量的设置脚本为了做到这一点。由于上述原因,我不愿意添加任何<script> <div> 之后的标签,或添加 classid<div> .鉴于这些限制,模拟 onload 的最佳方法是什么?非主体元素的属性?

最佳答案

在 DOM 规范中没有这样的 onload 事件,但是 DOM Level 2 规范提供了 Mutation event types , 以允许通知文档结构的任何更改,包括 attr 和文本修改,目前只有现代浏览器支持此类事件,并且它在 Internet Explorer 9 中存在错误!

但是您可以使用 DOMNodeInserted 事件 来监视文档的任何更改:

$(document).live("DOMNodeInserted", function(e){
$(e.target).val(...);
});

你应该小心使用 Mutation 事件,至少尝试更新!根据 W3C:

Mutation event types has not yet been completely and interoperably implemented across user agents, A new specification is under development with the aim of addressing the use cases that mutation events solves, but in more performant manner.

我想如果你用谷歌搜索这个问题,你可能会找到一些跨浏览器/jquery 插件,以防万一,这些链接可能会有帮助:

https://developer.mozilla.org/en/DOM/Mutation_events

http://help.dottoro.com/ljfvvdnm.php#additionalEvents

http://help.dottoro.com/ljmcxjla.php

http://help.dottoro.com/ljimhdto.php

http://www.bennadel.com/blog/1623-Ask-Ben-Detecting-When-DOM-Elements-Have-Been-Removed-With-jQuery.htm

关于javascript - HTML:onload 非 body 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081689/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com