使用Jquery更改DOM元素
Changing DOM elements with Jquery
我有一个Bootstrap面板,看起来像这样:
<div class="col-md-4 col-sm-6">
<div class="panel panel-default ">
<div class="panel-heading"><a href="#" class="pull-right" id="back">Back</a> <h4>Title 1</h4>
</div>
<div class="panel-body pre-scrollable">
<div id="data">
<div id="info">
<div class="list">Item 1
<div class="hidden">This is the rest of the data</div>
</div>
<div class="list">Item 2
<div class="hidden">This is the rest of the data</div>
</div>
</div>
</div>
</div>
</div>
</div>
我使用这个javascript在列表项和子div之间切换,并在面板中显示内容。单击"返回"链接后,面板将显示项目的原始列表。
$(document).on("ready", function(){/* jQuery toggle layout */
$( "#info .list" ).on('click' , function() {
window.data = $("#info").html();
var htmlString = $( this ).find('div.hidden').html();
$( "#info" ).html( htmlString );
});
$( "#back" ).on('click', function() {
console.log(window.data);
$( "#info" ).html( window.data );
});
});
一切都很好,只是它只工作一次,然后我必须刷新页面才能再次工作。
我在这里错过了什么?
下面是一个工作示例:
http://www.bootply.com/y84ZiHTQ5W
因为您使用javascript操作dom,所以事件只能工作一次。要将click事件绑定到元素上,即使它被js更改了,也应该使用事件委派技术,该技术具有相同的语法:
$("#info").on('click', ".list", function() {
window.data = $("#info").html();
var htmlString = $(this).find('div.hidden').html();
$("#info").html(htmlString);
});
$(document).on("click","#back", function() {
console.log(window.data);
$("#info").html(window.data);
});
您也可以将$("#info")
更改为:$(document), $("body")
。
它只在第一次工作的原因是,当您设置#info-div的html内容时,与之相关联的点击事件的DOM元素会被覆盖。
为了让它发挥作用,你需要在写入#infodiv的内容后重新添加点击事件处理程序
$( "#info .list" ).on('click' , clickHandler);
function clickHandler() {
window.data = $("#info").html();
var htmlString = $( this ).find('div.hidden').html();
$( "#info" ).html( htmlString );
$( "#info .list" ).on('click' , clickHandler);
}
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 通过AJAX侦听向DOM添加某些元素
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- Selenium无法在浏览器DOM中定位元素
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- 从dom中删除任何元素后,Touchmove事件停止触发
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- 找到元素DOM的根节点(阴影或光)的最佳方法是什么?
- 在querySelector:如何获得第一个和最后一个元素?dom中使用的遍历顺序