我通过 JQuery 对许多元素执行 javascript 转换的常规方式:
<div class="cow"></div>
<script> $(".cow").doStuff() </script>
然而,这个操作是脆弱和脆弱的:它是在页面全部只加载一次的假设下工作的。一旦您开始使用 Ajax 并进行部分重新加载,这种全局转换就会完全失效。如果服务器想要基于某些服务器端数据对每个元素进行不同的转换,它也不起作用。
我知道非元素的实际onload事件body不起作用。一种解决方案是提供所有元素 ID/类并使用 JQuery 立即引用它们:
<div id="cow"></div>
<script> $("#cow").doStuff() </script>
但是,这真的很混乱。我根本不喜欢它,部分原因是我给一个 ID 的每个元素都会污染全局 I 命名空间。我目前正在给元素一个有效的不可碰撞的 ID
<div id="id877gN0icYtxi"></div>
<script> $("#id877gN0icYtxi").doStuff() </script>
基于随机的 base64 数字。然而,这一切看起来像是一个巨大的黑客:我可以非常简单地使用它们各自的属性给元素onclicks 和onmousedowns 等,然后调用一个函数来转换给定的this.
现在,我知道onload这行不通。但是,有没有办法模拟它的功能?具体来说,我希望能够运行引用特定标签的 javascript 代码,this而无需为标签分配 ID。
编辑:本质上我想要类似的东西
<input onclick="alert('moo')"/>
但是对于oncreate;我目前的用例是用文本填充input或textarea,我目前正在做:
<input id="id877gN0icYtxi"/>
<script>$("#id877gN0icYtxi").val(...)</script>
其中...每个输入框都不同,因此无法使用“全局”jquery 转换轻松完成。另一方面,我不能只在创建它时设置valueor 属性input,因为它可能是 a textarea,我不知道。我想做类似的事情:
<input onload="$(this).val(...)"/>
这不起作用,但我希望它起作用。同样,这...是由服务器设置的,并且对于页面上的每个input标签都不同。
编辑2:
我很清楚 JQuery 通常用于以相同方式对许多元素进行整个文档转换。问题在于,在这种情况下,每个元素都以特定于该元素的方式进行转换,由服务器决定。具体用例是每个字段的内容都用 预填充$().val(),自然每个字段都会填充不同的内容。给每个元素一个唯一的ID 并使用 JQuery 进行全局搜索以再次找到该元素似乎是一种非常迂回的做事方式,当您开始进出页面的 Ajaxing 部分时当然会中断。
编辑3:
简而言之,我希望能够写作
<div onload="javascriptFunction(this)"/>
并javascriptFunction()在创建时运行<div>(无论是在初始页面上还是通过 ajax 插入)并<div>作为参数传递。就像单击 div时作为参数onclick运行一样,我希望发生同样的事情,但是当它被创建/插入到 DOM 中时。javascriptFunction()<div><div>
<head>为了实现这一点,我愿意接受任何数量的设置脚本。由于上面提到的原因,我不愿意在,<script>之后添加任何标签<div>,class或者id在<div>. 鉴于这些限制,模拟onload非主体元素的属性最好的方法是什么?