我想在其他动态列表的属性中创建 List 的内容副本。
我尝试使用jQuery完成此操作,我按如下方式完成:
HTML:
<ul class="main">
<li>Alpha</li>
<li>Beta</li>
<li>Gamma</li>
<li>Delta</li>
</ul>
<ul class="clone">
<li>content 1</li>
<li>content 2</li>
<li>content 3</li>
<li>content 4</li>
</ul>
<ul class="clone">
<li>content 1</li>
<li>content 2</li>
<li>content 3</li>
<li>content 4</li>
</ul>
[..etc..]
jQuery的:
var Alpha = $('ul.main li:nth-child(4n+1)').text();
var Beta = $('ul.main li:nth-child(4n+2)').text();
var Gamma = $('ul.main li:nth-child(4n+3)').text();
var Delta = $('ul.main li:nth-child(4n+4)').text();
$('ul.clone li:nth-child(4n+1)').attr('data-content', Alpha);
$('ul.clone li:nth-child(4n+2)').attr('data-content', Beta);
$('ul.clone li:nth-child(4n+3)').attr('data-content', Gamma);
$('ul.clone li:nth-child(4n+4)').attr('data-content', Delta);
问题是我必须为每个:nth-child()
写一个问题,以解决我想为nth-child(Xn+X)
创建 LOOP 的问题,因为如果我有100个.main
列表中的项目我想将这100个项目克隆到.clone
中所有其他data-content
列表(分别有100个项目)。
有没有更好的方法动态执行此操作,而不是为每个li编写 :nth-child(4n+1) ?
答案 0 :(得分:1)
解决方案涉及循环从.main
收集的内容数组。有很多种可能性。您可以通过.map
:
var contents = $(".main li").map(function () {
// $(this).text() is more compatible but more expensive
return this.textContent;
}).get();
然后,您可以通过:nth-child
方法获取元素的相对索引,而不是使用.index
。
$(".clone li").attr("data-content", function () {
return contents[$(this).index()];
});
答案 1 :(得分:1)
这可能会:
首先我们创建一个目标值数组。
var contents = $.map($('ul.main li', function(element, index) {
return $(element).text();
});
console.log(contents);
// => ['Alpha', 'Beta', 'Gamma', 'Delta']
然后我们需要在ul
的所有.clone
上使用一个循环ul
。对于每个li
,我们将再次循环其data-content
子项,并使用与我们之前设置的contents
数组匹配的索引设置$('ul.clone').each(function(index, ul) {
$('li', ul).each(function (i, li) {
$(li).attr('data-content', contents[i]);
});
});
的值。只要标记设置的方式与问题相符就可以了
{{1}}
我希望这很清楚。