在新包含的html片段上应用jquery和js函数
Apply jquery and js functions on newly included html fragment
我有一组类似的函数:
$("selector").hide();
$("selector2").on("click", dosomething);
...
// much more here
在一些用户交互之后,我想在页面中包含一些新的html片段。这个片段可以很短,也可以很长,可以包含任何内容(我无法预测片段中的内容)。
我想再次应用那些jquery/js函数,但只在新的片段部分,而不是整个页面。我该怎么做?(可以随意使用jQuery)
编辑:想象一下选择器document.getElementBy…,此选择器一次只针对一个文档工作。
假设我们已经有另外10个元素传递了selector2,并且绑定了onclick。现在我们正在添加新的html片段,其中可能包含传递selector2的新元素。我想做的是改变所有jquery方法的document,然后我想把这个新文档放在页面中,让它以某种方式共存…不确定文档是否是个好主意。
EDIT2:
我已经有了:
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="js/libs/jquery-2.1.4.min.js" type="text/javascript"></script>
<script src="js/main.js" type="text/javascript"></script>
<script type="text/javascript">
function dosomething() {
alert("My wife hates me!");
}
</script>
</head>
<body>
<div class="clickable">click me</div>
<div class="clickable">click me</div>
<div class="clickable">click me</div>
</body>
</html>
main.js
含量:
$(".clickable").on("click", dosomething);
document.querySelectorAll("div.clickable").style.color = "#333";
// this file is very long and you are forbidden to touch it
现在我从某个地方调用ajax,我得到一些html片段包含这个(或任何其他):
<div class="clickable">click me too</div>
我想调用:
$("body").append(htmlFragment);
但首先我想在片段上以某种方式调用main.js,但仅限片段和我禁止触摸main.js文件(最大是在函数中包装文件的内容);
如果你想应用与上面相同的选择,除了在新的片段中,那么下面的工作。
$('#newSection selector1').hide();
$("#newSection selector2").on("click", dosomething);
显然,#newSection
需要被替换为新片段的选择器。
编辑
根据你的评论。您可以将相关的jquery封装在一个函数中,并使用上下文选择器将其应用于该节。
var apply_jQuery = function(context){
// Add all relevant jQuery that needs to be reapplied here. eg
$('selector', context).click(/*do something*/);
}
apply_jQuery($(document)); // Will apply to full document.
var newFragment = $('#newFragment');
apply_jQuery(newFragment); // Will apply to fragment only.
如果我理解对了你的问题,你可以把你新添加的片段包装在一些容器中,然后用jQuery选择它并应用函数,像这样:
$('.container').hide();
这是相当微不足道的虽然…也许你有更复杂的东西或者只是不同的东西,而你没有提到这个?
如果我正确理解了您的问题,您应该希望将事件绑定到动态生成的元素。在你的例子中,这些元素有一个名为"clickable"的类
如果这是你想要实现的,那么使用下面的代码
$('body').on("click",".clickable", function(){
//do something...
})
上面的代码将一个事件绑定到包含在主体中的类clickable的任何元素,即使它是在调用该脚本后动态生成的,并且您不需要再次调用main.js文件。
首先我考虑的是文档,但这项技术仍处于试验阶段。
然后我做了这个讨厌的把戏,我不确定它的性能。首先,我从主体(或包装器)中分离所有元素,然后添加新的html片段。再次调用main函数后,选择器只能找到当前元素,事件绑定不会复制到正常元素。然后我再次分离这个片段并放回origin html。它可以同时用于jquery和本机选择器。
这不是最好的解决方案,但很简单,也是我找到的唯一一个。也许有人会找到更好的。// function that applies js only for new html
function reaplyJS(newHtmlFragment) {
var tempContent = $("#wrapper").children();
tempContent.detach();
$("#wrapper").append(newHtmlFragment);
main();
newHtmlFragment.detach();
$("#wrapper").append(tempContent);
}
// this is test part
function appendNewClickable() {
var htmlFragment = $('<div class="clickable">click me</div>');
reaplyJS(htmlFragment);
$("#wrapper").append(htmlFragment);
}
var click = 0;
function writeConsoleMessage() {
click++;
console.log("click number: " + click);
}
function main() {
$(".append").on("click", appendNewClickable);
$(".clickable").on("click", writeConsoleMessage);
var nodes = document.querySelectorAll("div.clickable");
for (var i = 0; i < nodes.length; i++) {
nodes[i].style.color = "#FF3232";
}
}
$(main);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
<div class="append">append new clickable element</div>
<div class="clickable">click me</div>
<div class="clickable">click me</div>
<div class="clickable">click me</div>
</div>
- jQuery/JS包含运算符或类似运算符
- 使用.on动态添加jquery/js不知道的html元素
- 如何检查链接是否有文本,并根据文本值评估条件-Jquery/JS
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- 在服务工作者中导入jquery.js
- jQuery/JS获胜't在表单验证后重定向
- jquery.js和jquery.lite.js有什么区别
- 在WordPress站点中加载jquery.js后加载javascript代码
- 将jQuery.js文件附加到html文档中
- jquery/js中的自执行函数
- 如何使用jquery/js/css逐步突出显示一段文本
- jQuery/JS Mimic Facebook's不在页面上时,标题在新消息上闪烁
- Rails:如何在jQuery(.js.erb)中调用“create”操作
- jQuery/JS:从服务器同步读取文本文件
- jQuery/js- 如何从基于 href 的类中获取菜单名称
- 相对于他在jQuery/Js中的一个内部数据对数组进行排序
- 获取剩余时间和上传文件速度 - ajax jquery/js
- 如何在One'中包含jQuery.js;s Own.js在$(document).ready之前
- jQuery js没有冲突
- 这是关于Jquery/JS的,如果我改变元素's HTML-我可以对它执行其他Jquery/JS操作吗