jQuery为附加的html上的“is:empty”检查返回true

时间:2009-09-03 22:13:51

标签: jquery dom

用户可以在我的网站上传图片,然后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); 
} 

这个想法是用户最多可以添加三张图片。我为每张照片都有一个专用元素。它按顺序检查每个元素以查看插入位置。这最初工作正常(如果在页面加载时,有两张图片,它将插入第三个插槽)。在不刷新页面的情况下添加两个图像时,它会失败

2 个答案:

答案 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 添加到网址以查看代码并使用它。

jQuery Code(我写的很匆忙,所以可能有点整理)

$('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