innerHTML 的问题
Problems with innerHTML
我有一个折叠的 table,link 折叠了它的内容。我想使用 JS 更改 link(例如,从“+”到“-”和向后)。我做到了,但我的 table 停止崩溃了。这是代码:
<div class="panel-group" id="accordion">
<h6>
<a class="collapsed" data-toggle="collapse"
id="element${result.index}" data-parent="#accordion"
href="#collapse${result.index}"
onClick="javascript:changeText(${result.index})"><span
class="glyphicon glyphicon-plus"></span></a> ${result.name}
</h6>
<div id="collapse${result.index}"
class="panel-collapse collapse">
<div class="panel-body">
等等。函数:
function changeText(idElement) {
var element = document.getElementById('element' + idElement);
if (element.innerHTML === '<span class="glyphicon glyphicon-plus"></span>')
{
//element.innerHTML = '<span class="glyphicon glyphicon-minus"></span>';
}
else {
//element.innerHTML = '<span class="glyphicon glyphicon-plus"></span>';
}
}
如果我评论 innerHTML
部分,table 会折叠,但图标不会改变。如果我删除评论,图标会改变,但 table 不会折叠。我怎样才能避免这种情况?
试试这个..
function changeText(idElement) {
var element = document.getElementById('collapse' + idElement);
if (element.innerHTML == '<span class="glyphicon glyphicon-plus"></span>')
{
//element.innerHTML = '<span class="glyphicon glyphicon-minus"></span>';
}
else {
//element.innerHTML = '<span class="glyphicon glyphicon-plus"></span>';
}
}
您不应使用 innerHTML
,因为它会删除事件绑定。在您的情况下,您可以简单地更改 class 名称:
function changeText(obj) {
var element = obj.children[0];
if (element.className.indexOf('glyphicon-plus') > -1) {
element.className = 'glyphicon glyphicon-minus';
}
else {
element.className = 'glyphicon glyphicon-plus';
}
}
并使用它将 onclick
属性:
onClick="changeText(this)"
先去掉内联JS....onClick="javascript:changeText(${result.index})"
然后将点击事件侦听器附加到该元素,并切换 类 而不是替换整个图标范围元素 - 替换该元素会删除绑定到该元素的所有事件侦听器:
$(function() {
$('[id^=element]').on('click', function() {
$('span', this).toggleClass('glyphicon-plus glyphicon-minus');
});
});
我有一个折叠的 table,link 折叠了它的内容。我想使用 JS 更改 link(例如,从“+”到“-”和向后)。我做到了,但我的 table 停止崩溃了。这是代码:
<div class="panel-group" id="accordion">
<h6>
<a class="collapsed" data-toggle="collapse"
id="element${result.index}" data-parent="#accordion"
href="#collapse${result.index}"
onClick="javascript:changeText(${result.index})"><span
class="glyphicon glyphicon-plus"></span></a> ${result.name}
</h6>
<div id="collapse${result.index}"
class="panel-collapse collapse">
<div class="panel-body">
等等。函数:
function changeText(idElement) {
var element = document.getElementById('element' + idElement);
if (element.innerHTML === '<span class="glyphicon glyphicon-plus"></span>')
{
//element.innerHTML = '<span class="glyphicon glyphicon-minus"></span>';
}
else {
//element.innerHTML = '<span class="glyphicon glyphicon-plus"></span>';
}
}
如果我评论 innerHTML
部分,table 会折叠,但图标不会改变。如果我删除评论,图标会改变,但 table 不会折叠。我怎样才能避免这种情况?
试试这个..
function changeText(idElement) {
var element = document.getElementById('collapse' + idElement);
if (element.innerHTML == '<span class="glyphicon glyphicon-plus"></span>')
{
//element.innerHTML = '<span class="glyphicon glyphicon-minus"></span>';
}
else {
//element.innerHTML = '<span class="glyphicon glyphicon-plus"></span>';
}
}
您不应使用 innerHTML
,因为它会删除事件绑定。在您的情况下,您可以简单地更改 class 名称:
function changeText(obj) {
var element = obj.children[0];
if (element.className.indexOf('glyphicon-plus') > -1) {
element.className = 'glyphicon glyphicon-minus';
}
else {
element.className = 'glyphicon glyphicon-plus';
}
}
并使用它将 onclick
属性:
onClick="changeText(this)"
先去掉内联JS....onClick="javascript:changeText(${result.index})"
然后将点击事件侦听器附加到该元素,并切换 类 而不是替换整个图标范围元素 - 替换该元素会删除绑定到该元素的所有事件侦听器:
$(function() {
$('[id^=element]').on('click', function() {
$('span', this).toggleClass('glyphicon-plus glyphicon-minus');
});
});