2017-07-25 75 views
-1

使用'for'循環,假設我想用4個不同的ID在正文中創建4個不同的'p'元素。我走近如下問題:jQuery:在創建元素的同時創建一個id

for (var i = 1; i <= 4; i++) { 
    $("body").append(document.createElement("p")); 
    $("p").attr('id', 'paragraph' + i); 
} 

這是我的一個非常愚蠢的錯誤,繼承人爲什麼:

每次循環的增量,它會創建另一個p元素,這是我希望它做。但是,它將所有p元素分配給最新值'i'。所以當循環執行時,所有p元素的值都是4。

我的問題是:當'p'元素被添加時,是否有辦法將'p'元素的ID分配給'i'的當前值?


需要明確的是,這是我的目標:

<p id="paragraph1"></p> 
<p id="paragraph2"></p> 
<p id="paragraph3"></p> 
<p id="paragraph4"></p> 

但這樣做jQuery的通過,而無需編輯實際的HTML文件。

+0

爲什麼你需要你的元素有ID?如果沒有首先獲取對該元素的引用,並且一旦您不再需要該ID,則無法分配ID。 – nnnnnn

回答

-1

這是選擇的問題

$("p:last").attr('id', 'paragraph' + i); 

將選擇最後一個P html標籤,並給它當前的i值

檢查這個link

0

而不是使用document.createElement()的,使用jQuery:

$("body").append($("<p/>", { id: "paragraph" + i })); 

當你通過傳遞你想要的元素的HTML片段創建與jQuery的元素,你可以添加一個對象,它爲新對象提供的屬性。這可以包括各種各樣的東西,包括本地DOM東西以及諸如jQuery事件處理程序之類的東西。例如,您可以添加文字到您的段落:

$("body").append($("<p/>", { 
    id: "paragraph" + i, 
    text: "Hello I am paragraph number " + i 
})); 
+0

我懷疑這是downvoted,因爲大多數人不知道,jQuery函數可以做到這一點:) – Pointy

+1

我們downvote什麼我們不明白... – nnnnnn

0

你在這裏用解決方案https://jsfiddle.net/7snh10zz/

for (var i = 1; i <= 4; i++) { 
 
    $("body").append("<p id='paragraph" + i + "'>Paragraph " + i + "</p>"); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

還有一個辦法做到這一點https://jsfiddle.net/7snh10zz/2/

for (var i = 1; i <= 4; i++) { 
 
    $("body").append(document.createElement("p")); 
 
    $("p:last-child").attr('id', 'paragraph' + i).text("Paragraph " + i); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

爲什麼不使用jQuery實例化新元素,因爲jQuery已經用過的? – Pointy

+0

*「與解決方案」* - 我認爲你的意思是** **解決方案。但我很佩服你的信心。 – nnnnnn

+0

@nnnnnn ... Ya .... – Shiladitya

2

創建元素和屬性設置第一

for (var i = 1; i <= 4; i++) { 
    var p= document.createElement("p"); 
    p.setAttribute("id", "paragraph" + i); 
    $("body").append(p); 
} 
+1

沒有必要使用'.setAttribute()'來設置DOM元素節點的「id」。 'p.id =「段落」+ i;'也會起作用。 – Pointy

0

你的代碼的意思是,$("p")選擇所有創建的元素並給出id。 在第一次迭代中,你的身體有一個p元素,id爲paragraph1。 在第二次迭代中,您的身體有兩個帶有id段落的p元素。它覆蓋第一個<p>標記的id。 在第三次迭代中,你的身體有三個p元素,你的代碼選擇這三個元素並給所有標籤賦予paragraph3的id。 以這種方式,最後一次迭代會使您的身體擁有4個帶有段落4的id的元素。 您可以使用此代碼修復。

function appendText() { 
     for (var i = 1; i <= 4; i++) { 
      var txt = "<p id='paragraph"+i+"'></p>"; 
      $("body").append(txt); 
     }  
    }