0

我想将一个 div 附加到<li>页面上某个特定的末尾。我无法更改标记的结构,所以我必须从我掌握的有关它的信息中深入了解。我开始span.ruUploadSuccess并找到一个包含我的数组中的文本fileInfo[0]
然后我从那里去找两个父母,这是<li>我需要附加的。如果 div 已经存在,我不想附加这些数据,所以我检查该行是否已经有这个 div(使用.has()),然后使用.not().

这在除 IE7 之外的所有浏览器中都非常有效。在 IE7 中,它找到了我想要附加到的正确行,但它没有过滤掉那些已经有这个 div 的行。这会导致两次(或更多次)附加相同的 div。

有没有更简单的方法来访问这个特定元素?这是否有理由在 IE7 中以不同的方式运行?

我用于查找<li>要附加到的元素的代码:

var row = $("span.ruUploadSuccess:contains('" + fileInfo[0] + "')").parent().parent();
$(row).not($(row).has("div.contactUsAttachmentFileSize")).append(label);

这是一些示例标记,显示了我正在尝试处理的结构:

<ul id="content_0_leftcolumn_0_Attachments_RadAsyncUploadListContainer" class="ruInputs">
  <li>
    <span class="ruFileWrap ruStyled">
      <span class="ruUploadProgress ruUploadSuccess">test file (above 5mb).zip</span>
    </span>
    <input class="ruButton ruRemove" type="button" name="RowRemove" value="Remove" tabindex="-1">
    ===> DIV GOES HERE <===
  </li>
</ul>
4

2 回答 2

0

如何使用过滤器()。它似乎比 not()/.has() 更好用

$(row).filter(function(){
    return !$(this).find('div.contactUsAttachmentFileSize').length;
}).append(label);

不,有小提琴 http://jsfiddle.net/wirey00/vxmGw/

filter() 小提琴 http://jsfiddle.net/wirey00/B6v3A/

于 2012-08-09T20:49:33.607 回答
0

我只是以一种更能表达你实际想要做的事情的方式重新编码它。虽然你所拥有的应该工作 - 很难理解,而且更深思熟虑的方法避免了可能在旧 IE 中造成麻烦的细微差别的 jquery 内容。您的意图也更加清楚。

您真的只想测试 div 是否已经存在,如果不存在则添加它。所以把它写成条件式。

http://jsfiddle.net/jamietre/ECVny/

var row = $("span.ruUploadSuccess:contains('test file')").parent().parent();

if (!row.find("div.contactUsAttachmentFileSize").length) {
    row.append(label);
}
于 2012-08-09T20:50:17.297 回答