2009-09-29 69 views
0

工作,我有以下的jQuery功能:選擇祖父母格不能在IE/Chrome的

function GetGrandparentDiv(item) { 
    return item.parents('div:eq(1)'); 
} 

這是由下面的函數調用:

$(".addset").click(function(e){ 
     e.preventDefault(); 

     var addstr = "<span class='setrow'>random html</span>"; 
     var gp = GetGrandparentDiv($(this)); 
     alert(gp.attr('id')); 
     gp.find("div.esets").append(addstr); 

    }); 

正如你所看到的,我在那裏卡住了一個警報。該代碼在FireFox中非常有效,並顯示了父級div的正確ID。但是,在IE和Chrome中,它不起作用。 IE/Chrome中警報框中的ID也爲空或「」。

我在做一些IE/Chrome不支持的功能嗎?

編輯:

的HTML看起來是對的效果(我沒有它在我面前)

<div id="grandparent"> 
    <div id="parent"> 
      <input type="button" class="addset" value="Add Set" /> 
      <!-- other stuff --> 
    </div> 
    <!-- other stuff --> 
</div> 

編輯: 這裏的實際HTML,因爲我現在有它在我面前:

<div id="random2" class="ebox"> 
    <div class="ebheader"> 
     <!-- text -->   
     <span class="right"> 
      <input type="button" class="addset" value="Add Set"/> 
     </span> 
    </div> 
<!-- other stuff --> 
</div> 

使用GetGrandparentDiv()功能在FF以外的任何其他功能都不起作用。具有諷刺意味的是,我在我的應用程序的其他區域使用該功能,並且它可以正常工作。

我最終什麼事做的解決方案是以下幾點:

var gp = $(this).closest(".ebox"); 

由於每個動態添加的「容器」如果你將有一個類類型.ebox的(因爲我不知道的id該div,但我知道這個班)。感謝您的幫助和建議!

+0

是您的代碼withing一個$(文檔).ready(... block? – karim79 2009-09-29 03:03:02

+0

Yuppers。它位於$(document).ready()塊內。 – MunkiPhD 2009-09-29 03:11:32

+0

couldnotreproduce – ken 2009-09-30 04:20:03

回答

0

不能確定兼容性的事情,但也許做同樣的事情替代代碼可能工作。爲了不用item.parents('div:eq(1)')來獲取父元素列表中的第一個div,爲什麼不試試item.closest('div')或者至少item.parents('div')。當量(1)。不過,我喜歡closest,這是一個很棒的工具。

另一件事我會嘗試正反轉報價爲addstr變量,如:

addstr = '<span class="setrow">random html</span>'; 
+0

我沒有成功與您的建議:/我試圖最接近,但無法讓它檢索grandparent div – MunkiPhD 2009-09-29 03:46:57

+0

經過進一步的調整之後,最接近最終成爲我與之一起的解決方案,我用解決方案編輯了這個問題 – MunkiPhD 2009-09-29 23:42:10

1

嘗試(從類改爲ID - 對不起):

$(".addset").closest("#grandparent"); 

到達祖父母分部。或($。「addset」)。parent()。parent();如果你不知道div的id。

+0

1)沒有名爲「祖父母」的班級。 2)ID爲「祖父母」的DIV僅僅是一個例子 - 我相信在運行時他不會知道DIV的ID,因此也不知道問題的原因。當然,一種選擇是改變HTML並添加一個「祖父母」類,但這不是問題的關鍵。 – ken 2009-09-29 17:59:32

+0

這不起作用,因爲做$(「,addset」)會選擇一個addset類的所有項目。 – MunkiPhD 2009-09-29 23:40:18

1

所提供的示例代碼,這個工程預期在IE 8.0.6001和Chrome 4.0.213 - 我與文本「祖父母」的警報。

也許你有一些格式不正確的HTML?

此外,這句法應該工作一樣(至少在我的測試做了這個問題),但你可以給它一個鏡頭,看看:

function GetGrandparentDiv(item) { 
    return item.parents('div').eq(1); 
} 
+0

我嘗試了所有這些變化,但它仍然無法正常工作。 – MunkiPhD 2009-09-29 23:39:36