如何将逗号分隔的列表转换为<ul>列表
How do I convert a comma separated list into a <ul>list in JavaScript?
我正在尝试将逗号分隔的列表转换为<ul>列表
HTML
<div class="fruit">apple,banana,melon</div>
JS-
$('.fruit').each(function(){
var txt = $(this).text();
$(this).html(txt.replace(/,/g,'</li><li>'));
}).wrapInner('<ul><li></li></ul>');
我本以为。。。
<div class="fruit">
<ul>
<li>apple</li>
<li>banana</li>
<li>melon</li>
</ul>
</div>
但是,结果是…
<div class="fruit">
<ul>
<li>apple
<li>banana</li>
<li>melon</li>
</li>
</ul>
</div>
为什么"apple"answers"banana"之间的第一个逗号只替换为'<li>',而缺失的'<li>'移动到最后,在"甜瓜"后面?
或者,我应该使用其他方法,如split()&join()以获得正确的结果?
这是一种方法:
$('.fruit').html(function(_, oldHTML) {
return '<ul><li>' + oldHTML.split(',').join('</li><li>') + '</li></ul>';
});
请参考笔
<div class="fruits">apple,banana,melon</div>
var fruitsNode = document.querySelector('.fruits');
var fruits = fruitsNode.innerHTML.split(',');
var fruitsHTML = [];
fruits.forEach(function(fruit){
fruitsHTML.push('<li>' + fruit + '</li>');
});
fruitsNode.innerHTML = fruitsHTML.join('');
因为您将wrapInner
应用于each
。您的正则表达式正常。
要修复它,请将wrapInner
应用于html
:
$('.fruit').each(function(){
var txt = $(this).text();
$(this).html(txt.replace(/,/g,'</li><li>')).wrapInner('<ul><li></li></ul>');
});
但是,您传递给wrapInner
的内容是无效的html。这不会破坏东西,但我更喜欢这样更干净的东西:
$('.fruit').each(function(){
var txt = $(this).text();
$(this).html('<ul><li>' + txt.replace(/,/g,'</li><li>') + '</li></ul>');});
为什么
"apple"
和"banana"
之间的第一个逗号只替换为<li>
,而缺少的</li>
移动到"melon"
后面的最后一个逗号?
事实并非如此。这只是您创建的无效html的结果:
apple</li><li>banana</li><li>melon
将解析为的
apple<li>banana</li><li>melon</li>
当您使用CCD_ 11时。它被.wrapInner
包装到<ul><li>…</li></ul>
中,这导致您看到的带有嵌套<li>
标记的无效DOM。
我应该使用其他方法吗,比如split()&join()以获得正确的结果?
是的。我推荐
$('.fruit').contents().replaceWith(function(){
return $('<ul>').append($(this.data.split(",")).map(function() {
return $('<li>').text(this).get();
}));
})
如果这就是你想要做的,那么就使用一个简单的(未经测试的)一行,比如'<ul><li>' + document.getElementsByClassName("fruit")[0].textContent.replace(',', '</li><li>') + '</li></ul>'
。
另一方面,如果你想在不同的地方(动态类名、元素类型等)重用它,那么你就需要重构成一个合适的方法。
我推荐Vohuman的方法。这只是另一种方法。。不那么方便,但仍然是一种选择。
var getContent = $('.fruit').html().split(',');
var list = '<ul>';
$(getContent ).each(function(key,value){
list += '<li>'+ value +'</li>';
}
list += '</ul>'; //list now contains a complete list.
- 如何附加<ul><李>元素位于某个特定条件的父元素列表之间
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- 当我有<选择>下拉列表
- 如何转换列表<对象>转换为JsonResult
- 如何将逗号分隔的列表转换为<ul>列表
- 如何将Array转换为<ul><李>以字母为标题的字母列表
- 如何使用C#列表<对象>在Javascript中
- 我正试图动态地拉动<h3>元素,并将它们放在选择列表中
- JavaScript将缩进文本转换为HTML列表重复顶层<李>'s为<ul>'s
- ng重复不使用表<tr>但是与列表<李>
- 调用.ajax方法得到未定义的json结果,返回json格式列表<字符串>
- 传递数组列表<ImageItems>从一个活动到另一个活动.图像项包含位图和字符串
- 转换C#列表<int[]>使用Razor将其转换为JavaScript
- 如何附加列表项<李>从无序列表<ul>其他四个未排序列表之间
- 下拉列表<选择>标签
- 列表<T>到Javascript数组
- Knockout-3.2.0-内部列表<对象>推送问题
- 检索列表`<li>`具有Jquery Selector:ID的标记以某种格式开头
- 添加新<选项>到所有下拉列表<选择>标签
- C#列表<字符串>到JavaScript字符串转换