2012-08-09 64 views
0

我想在頁面上追加一個div到某個<li>的末尾。 我無法改變標記的結構,所以我不得不從我所掌握的信息中鑽取。 我從span.ruUploadSuccess開始,找到一個包含我的數組fileInfo[0]中文本的文本。
然後,我去了兩位父母,這是我需要追加的<li>。 如果div已經存在,我不想追加這些數據,所以我檢查該行是否已經有這個div(使用.has()),然後使用.not()從我的結果中篩選出來。jQuery .not()和.has()在IE7中無法正常工作

這在除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> 
+0

你可能想分手'。不是(。先後())'線,並檢查是否IE7上'。不嗆()'或'。先後()',然後根據結果做一個解決方法。或者考慮放棄對IE <8的支持,並且向微軟發送一筆賬單,以便爲他們愚蠢的瀏覽器寫入黑客時間:) – MrOBrian 2012-08-09 20:31:17

+0

@MrOBrian,我現在只是這樣做了,它是'.has()',它無法找到任何結果。 – 2012-08-09 20:50:18

回答

0

() 。看來工作比最好不要()/。有()

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

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

過濾器()小提琴 http://jsfiddle.net/wirey00/B6v3A/

+0

我得到了與以前的答案一樣的問題。 '.find()'似乎沒有在IE7中拾取div。 – 2012-08-09 21:08:23

+0

我不確定那麼..我沒有IE7來測試。我確實在BrowserStack.com上試過了,它在IE7 – 2012-08-09 21:20:56

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); 
} 
+0

中運行良好,這絕對是一種更乾淨的方法,所以我會使用它。 不幸的是,如果它已經存在,它仍然沒有找到div。再次在IE7中。 – 2012-08-09 20:57:26