用户可以在我的网站上传图片,然后jQuery将其插入带有append()的页面。在追加之后,我需要能够确定是否存在某些内容,但jQuery的“is:empty”检查返回true,尽管内容已被追加。如果我重新加载页面,“is:empty”检查将返回false。似乎jQuery在追加时无法更新DOM,然后在运行“is:empty”时检查其未更新的模型。有没有人知道是否有解决方法?
修改
从评论中添加 -
if ($('#issueimage1'+issueid).is(':empty')) {
$('#issueimage1'+issueid).append(responseText);
}
elseif ($('#issueimage2'+issueid).is(':empty')) {
$('#issueimage2'+issueid).append(responseText);
}
else {
$('#issueimage3'+issueid).append(responseText);
}
这个想法是用户最多可以添加三张图片。我为每张照片都有一个专用元素。它按顺序检查每个元素以查看插入位置。这最初工作正常(如果在页面加载时,有两张图片,它将插入第三个插槽)。在不刷新页面的情况下添加两个图像时,它会失败
答案 0 :(得分:24)
当您说“is:empty
”时,您的意思是
$([selector]).is(":empty")
这对我来说没问题,正如Working Demo
所示$(function() {
$("#empty").click(function() {
alert($('#myDiv').is(':empty'));
});
$("#append").click(function() {
$('#myDiv').append('<span>Appended!</span>');
});
});
<!-- not all html shown, for brevity -->
<body>
<div id="myDiv"></div><br/>
<button id="empty">Check if div empty</button>
<button id="append">Append to div</button>
</body>
修改强>
使用:empty
的问题在于它还评估一个元素是否包含文本节点以及元素节点,如果它包含文本节点,则不认为是空的。我不认为这是你想要的行为,所以我们可以在.length
的一组包装的子元素上使用<td>
来确定它是否有任何子元素节点;如果长度为0,则为此目的将其视为空(检查.length
与使用调用.size()
的{{1}}相同,但直接检查.length
将略有不同快)。
所以,假设我们.length
引用了<tr>
this
这是一个Working Demo来向您展示一个示例。将 / edit 添加到网址以查看代码并使用它。
$('td', this).each(function() {
// this inside the function will reference the <td>
// get any child elements and check the length
if ($('*',this).length === 0) {
// this <td> is empty!
// break out of the each loop
return false;
}
});
HTML
$('a.select').click(function(e) {
e.preventDefault();
var anchor = $(this);
var radio;
$('input:radio[name="imagePicker"]').each(function() {
if (this.checked === true) {
radio = $(this);
return false;
}
});
if (radio === undefined) {
$('#comment').text('You must select an image').css('color','red');
}
else {
var checked = false;
var tds = anchor.closest('tr').children('td');
tds.each(function(i, val) {
if ($('*', this).length === 0) {
radio.next().clone(true).appendTo(this);
$('#comment').text('Appended to td Image ' + i).css('color','green');
checked = true;
return false;
}
});
if (!checked) {
$('#comment').text('No empty td in this row').css('color','red');
}
}
});
$('input:radio[name="imagePicker"]').click(function() {
$('#comment').text('');
});
答案 1 :(得分:5)
仅供参考,任何空格都会导致:空虚为假:
<div id="first"></div>
<div id="second"> </div>
console.log($('#first').is(':empty')); //true
console.log($('#second').is(':empty')); //false