Javascript 循环通过一组ID并复制它们
我有一个无序列表,ID如下:Javascript 循环通过一组ID并复制它们,javascript,jquery,Javascript,Jquery,我有一个无序列表,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> 但正如您可能知道的,它不会循环,而是获取第一个id并将其分配给所有div,从
<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>
但正如您可能知道的,它不会循环,而是获取第一个id并将其分配给所有div,从而产生:
<div id="e4d"></div>
<div id="e4d"></div>
如果你能解释一下逻辑上的缺陷,甚至可以给我一个链接,我会非常感激,因为我可以通过阅读来提高我的技能。我在看,但没有意义。谢谢你的阅读 收集事件日的所有ID,然后根据需要使用所需ID动态创建div可能会更容易
$("li.event_day").each(function() {
$("#descriptions").append(
$("<div>").attr("id", $(this).attr("id") + "d")
);
});
$(“li.event\u day”)。每个(函数(){
$(“#说明”)。追加(
$(“”).attr(“id”),$(this.attr(“id”)+“d”)
);
});
收集事件日的所有ID,然后根据需要使用所需的ID动态创建div可能会更容易
$("li.event_day").each(function() {
$("#descriptions").append(
$("<div>").attr("id", $(this).attr("id") + "d")
);
});
$(“li.event\u day”)。每个(函数(){
$(“#说明”)。追加(
$(“”).attr(“id”),$(this.attr(“id”)+“d”)
);
});
能否在呈现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;
?>
能否在呈现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;
?>
jquery中的each函数还将索引参数传递给回调函数。 前提是描述中的div数量与类event_day中的div数量相同:
$("#descriptions>div").each(function(n) {
$(this).attr("id", $(".event_day").eq(n).attr("id") + "d");
});
.eq(n)返回jquery结果集中位置n处的元素
不过,您的查询可能会更有效率,因为现在您可以遍历描述中每个div的dom。更好的(imho)是:
var event_days = $("#listIdentifier .event_day");
$("#descriptions>div").each(function(n) {
$(this).attr("id", event_days.eq(n).attr("id") + "d");
});
jquery中的each函数还将一个索引参数传递给回调函数。 前提是描述中的div数量与类event_day中的div数量相同:
$("#descriptions>div").each(function(n) {
$(this).attr("id", $(".event_day").eq(n).attr("id") + "d");
});
.eq(n)返回jquery结果集中位置n处的元素
不过,您的查询可能会更有效率,因为现在您可以遍历描述中每个div的dom。更好的(imho)是:
var event_days = $("#listIdentifier .event_day");
$("#descriptions>div").each(function(n) {
$(this).attr("id", event_days.eq(n).attr("id") + "d");
});
您的逻辑中的缺陷是,您只匹配第一个元素,即e4 因此,只需创建一个数组并添加与类事件日匹配的ID即可:
$("#descriptions>div").each(function(n) {
$(this).attr("id", $(".event_day").eq(n).attr("id") + "d");
});
然后在description div中循环遍历div,并按如下方式设置它们的ID:
var count = 0;
$("#descriptions>div").each(function() {
$(this).attr("id", myIds[count]);
count = count + 1;
});
您的逻辑中的缺陷是,您只匹配第一个元素,即e4 因此,只需创建一个数组并添加与类事件日匹配的ID即可:
$("#descriptions>div").each(function(n) {
$(this).attr("id", $(".event_day").eq(n).attr("id") + "d");
});
然后在description div中循环遍历div,并按如下方式设置它们的ID:
var count = 0;
$("#descriptions>div").each(function() {
$(this).attr("id", myIds[count]);
count = count + 1;
});
这很有效,但我认为Les的解决方案可能更有效。不过,感谢您的输入,其他问题的参考资料也很好:)这很有效,但我认为Les的解决方案可能更有效。不过,感谢您的输入,对于其他问题,这是一个很好的参考:)