2013-06-26 53 views
0

所以我有一個div類ngg-navigation。我需要使用jQuery爲其添加ID,因爲我無法直接觸摸HTML。下面是我有什麼:jQuery:添加ID到新生成的DOM元素

jQuery(function($){ 
     $('.ngg-navigation').attr('id', 'ngg-navigation-id'); 
    }); 

這初始負載正常工作,但還有其他的javascript,做AJAX和刷新DIV,導致ngg-navigation-id ID消失。有沒有辦法在每次出現時添加ID?

+2

爲什麼你需要給它添加一個ID? – lonesomeday

+1

唯一的方法是每次重新添加元素時重新運行此行。注意:是否只有一個'$('.gggg導航')元素?如果是這樣,爲什麼給它一個ID?如果沒有,請確保您的ID是** unique **。多個元素*不能*具有相同的ID。 –

+3

爲什麼你首先需要一個ID?顯然這個班級具有足夠的特點來打這個元素,所以爲什麼要擔心給它一個ID? – prodigitalson

回答

2

在評論中,你說你想添加ID的唯一原因是CSS特異性。

你不需要一個ID,你只需要讓你的CSS選擇器更具體。

而不是做的:

.ngg-navigation{ 
} 

嘗試使之前添加父更具體。像:

#parent-element .ngg-navigation{ 
} 
0

我想你可能想要添加一些代碼,在每次刷新div時,都會執行替換操作。

1

只是把它轉換成一個函數,並調用它,只要您需要:

function setId(){ 
    $('.ngg-navigation').attr('id', 'ngg-navigation-id'); 

    // you may want to consider this, as its faster: 
    // $('.ngg-navigation)[0].id = 'ngg-navigation-id'; 
} 

你可以把它在頁面加載(如你正在做的),回調來自AJAX調用,當你的貓昏過去......無論如何。

$(function(){ 
    setId(); 

    $.ajax({ 
     ... 
     success:function(){ 
      setId(); 
     } 
    }); 
}); 

這還假定你僅僅使用ngg-navigation類的單個元素,否則就會產生無效的HTML。

你也可以把它用做參數的可重用性一點:

function setId($item,newID){ 
    $item.attr('id',newID); 

    // or the faster alternative: 
    // $item[0].id = newID; 
} 

和呼叫:

setId($('.ngg-navigation'),'ngg-navigation-id'); 

這樣你就可以在任何其他jQuery對象/ ID配對過,它會爲你設置你的ID。只是思考的食物。

0

正如其他人所說,id似乎沒有必要,因爲您可以通過它的類名來引用該元素。據推測,這是該班級的第一個或唯一元素。您始終可以將其稱爲:

$('.ngg-navigation').first() 

每當您需要使用此元素時,您可以隨時在此時添加該ID。

如果您想要,但您可以調查jQuery ajaxComplete,以註冊處理程序以在Ajax請求完成時調用。

儘管基於你最近的評論,如果你需要重寫CSS,那麼你可以使用jQuery來做到這一點,設置你需要的規則;這將覆蓋其當前的CSS。

0

我想你可以包裹你的DIV在另一個,並將該ID應用到這個父DIV。

這樣孩子DIV可以改變,仍然可以使用$('#yourID')。find('。ngg-navigation')作爲例子。

不知道這種方法是乾淨的,但它應該很好,很快。