注入<脚本>标签给它一个合适的位置
inject <SCRIPT> tag giving it a proper location
用例:使用"遗留"PHP文件,我想拦截提交和链接,这样它们就可以替换给定div的内容,而不是重写整个页面。所以我使用JQ加载来加载PHP文件。但这个注入的PHP生成的东西还必须包含JS/JQ代码,以拦截未来的提交和链接。在页面上使用一个这样的DIV做这件事没有问题。
如果你想在一个页面上有多个DIV都这样做,你需要SCRIPT,当它们运行时(它们都运行同一个"xxx.js"文件),能够检测到它们的父DIV。因此,这个想法是有多个SCRIPT,都调用"xxx.js",每个SCRIPT都包含在其引用DIV中。
- 我已经尝试合并{SCRIPT src='xxx.js'}标记,以便它由加载的PHP文件生成
- 我还尝试过在从load()成功返回时调用{SCRIPT src='xxx.js'},即使用getScript()
- 同样在从load()返回时,我尝试append()在我选择的DIV末尾附加字符串"{SCRIPT src='xxx.js'}{/SCRIPT}"
问题是,对于这样一个注入的SCRIPT,它似乎总是证明父级是HEAD,并且它没有兄弟元素:即,当你去的时候:
var this_js_script = $( document.currentScript );
var script_parent = this_js_script.parent();
(注意,我还尝试了这里最流行的答案中列出的其他技术,试图从"内部"访问SCRIPT元素)
然后证明,当脚本文件运行时,不可能找到它的位置,从而获得对其DIV(理论上是其父级)的引用。
可能有人知道我在说什么,并且有解决方案!另一方面,有人可能会让我做一个JS Fiddle。我从来没有做过,我想这不会是最简单的。
我想我有一个解决方案。
发生的情况是,遗留代码中的函数调用主函数。main函数将调用方的函数体作为字符串获取,然后查找页面上的所有script
对象,试图查看它是否可以将此字符串与其中任何对象匹配。如果找到匹配项,则会高亮显示父div
。
请注意,如果调用函数是匿名的,我认为这将不起作用。
.code-block
{
border: solid 1px #000;
width: 100px;
height: 100px;
border-radius: 5px;
float: left;
margin: 5px;
}
.johnny
{
border-color: #f00;
}
<script>
function main(param)
{
var script = arguments.callee.caller.toString();
var scripts = document.getElementsByTagName("script");
for(var i = 0; i < scripts.length; ++i)
{
if(typeof scripts[i].parentElement != "undefined")
{
if(scripts[i].innerText.indexOf(script) != -1)
{
scripts[i].parentNode.className = scripts[i].parentNode.className + " johnny";
}
}
}
};
</script>
<div class="code-block">
<script>
function doSomething(){}
</script>
</div>
<div class="code-block">
<script>
function doSomethingElse(){}
</script>
</div>
<div class="code-block">
<script>
function doSomethingRandom(){}
</script>
</div>
<div class="code-block">
<script>
function heresJohnny(){main("");}
</script>
</div>
<script>
heresJohnny();
</script>
我认为Hayko Koryun的方法很好。
最后,我找到了两种重新设计问题的方法,避免了将脚本标记放在特定位置的需要。
其中一个涉及以相当巧妙的方式传递参数(Naeem Sarfraz的回答)。
但事实上,最终,我所做的是设计它,使单个脚本在JQ load()拦截提交成功返回后,最终运行自己的main()函数。。。因此,我避免了脚本标记实际位于何处的问题,并倾向于使用JQ"框架"来处理所有内容,而不是将控制权"交给"PHP代码。
- 为什么我在 webpack 中需要 html 文件时会得到一个位置字符串
- Caret函数没有'如果插入符号在最后一个位置,就不能正常工作
- 是否可以将一个元素还原为它's上一个位置,而不将该位置作为参数传递
- 对jQuery UI可排序表应用包含可以防止将高行移动到最后一个位置
- 使用javascript和php,在单击图像时将其移动到另一个位置
- 创建从一个位置到另一个位置的路径动画
- 如何滚动到DIV顶部表格的最后一个位置(项目10)
- 将HTML元素的位置更改为另一个位置javascript
- 在站点的另一个位置运行 java 脚本
- 咖啡脚本数组查找下一个位置
- 如何将我的 Google 地图功能从自动查找我的位置更改为让我输入一个位置
- 当现有 Google 标记移动到另一个位置时,如何更新新的纬度和经度
- 使用 jquery 或 javascript 从一个位置导出 excel 文件
- 默认情况下,在 angularjs 中选择下拉列表中的最后一个位置显示占位符
- 如何将另一个 JSON 中的 JSON 对象移动到最后一个位置
- 用户在谷歌地图上标记一个位置
- 离开悬停后如何将P标签保持在上一个位置
- 使用jQuery单击时将元素移动/复制到另一个位置
- 将排序数组的数组元素移动到具有特殊逻辑的另一个位置
- 如何淡出图像,然后使其出现在jquery中的另一个位置