2009-11-13 60 views
0

我有IDS像這樣一個無序列表:遍歷一個集ID並複製

<li id="e1">01</li> 
<li id="e2">02</li> 
<li id="e3">03</li> 
<li id="e4" class="event_day">04</li> 
<li id="e5" class="event_day">05</li> 

而且像這樣的內容一個div:

<div id="descriptions"> 

<div></div> 
<div></div> 

</div> 

我要複製的IDS與類event_day列表中的項目,並將其分配給,並在最後一個字母的div使他們成爲:

<div id="e4d"></div> 
<div id="e5d"></div> 

我想出搭配:

$("#descriptions>div").each(function() { 
     $(this).attr("id", $(".event_day").attr("id") + "d"); 
}); 

但你可能會說,它不循環,而採取的第一個ID,並將其分配給所有的div導致:

<div id="e4d"></div> 
<div id="e4d"></div> 

我會非常感激,如果你可以解釋邏輯中的缺陷,甚至可以鏈接到我可以閱讀的東西來提高我的技能。我在看http://docs.jquery.com/Attributes/attr#keyfn但它沒有意義。謝謝閱讀!

回答

2

來自jquery的每個函數也傳遞一個索引參數給回調函數。 但如描述的div的量是相同的,與類event_day的div:

$("#descriptions>div").each(function(n) { 
     $(this).attr("id", $(".event_day").eq(n).attr("id") + "d"); 
}); 

.EQ(n)返回在jquery的resulset位置N的元素。

您的查詢可能會更有效,因爲現在您遍歷了描述中每個div的dom。更好(恕我直言)將是:

var event_days = $("#listIdentifier .event_day"); 
$("#descriptions>div").each(function(n) { 
     $(this).attr("id", event_days.eq(n).attr("id") + "d"); 
}); 
1

收集活動日的所有ID可能會更加容易,然後根據需要動態地使用所需的ID創建div。

$("li.event_day").each(function() { 
    $("#descriptions").append(
     $("<div>").attr("id", $(this).attr("id") + "d") 
    ); 
}); 
0

您可以在呈現HTML之前確定需要什麼,然後才能相應地繪製列表和div。

<?php 
$event_days = array(4,5); 

$list = '<ol>'; 
$divs = ''; 

for($i=1;$i<30;$i++) 
{ 
    // built the list 
    $list .= '<li id="e'.$i.'" '; 
    if(in_array($i, $event_days)) 
    { 
     $list .= 'class="event_day"'; 
    } 
    $list .= '>Day '.$i.'</li>'; 

    // build the divs 
    if(in_array($i, $event_day) 
    { 
     $divs .= '<div id="e'.$i.'d"></div>'; 
    } 
} 
$list .= '</ol>'; 

echo $list; 
echo $divs; 

?> 
0

你的邏輯缺陷是,你唯一的匹配的第一個元素,這是e4。

所以,只要創建一個數組,並添加匹配類event_day的IDS:

var myIds=new Array(); 
$("li.event_day").each(function() { 
    myIds.push($(this).attr("id") + "d"); 
}); 

然後通過描述專區內的div循環,並設置其ID是這樣的:

var count = 0; 
$("#descriptions>div").each(function() { 
     $(this).attr("id", myIds[count]); 
     count = count + 1; 
}); 
+0

這很好,但我認爲Les的解決方案可能更有效率。感謝您的輸入,但對其他問題很有幫助:) – MrSplashyPants 2009-11-13 17:03:17