【问题标题】:javascript foreach array and split by comma and space and display as a stringjavascript foreach 数组并用逗号和空格分隔并显示为字符串
【发布时间】:2013-07-25 11:40:22
【问题描述】:

我在一个列表项中有一个很长的项目列表,我需要通过它并添加一个逗号和空格并显示为一个逗号分隔的项目字符串:

所以我有以下几点:

 <ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>etc</li>
 </ul>

我需要显示如下:

第 1 项、第 2 项、第 3 项、第 4 项等

 <p>Item 1, Item 2, Item 3, Item 4, etc</p> 

我是 javaScript 的新手,所以任何帮助都会很棒。

谢谢

【问题讨论】:

  • 请向我们展示您编写的代码,我们很乐意为您提供帮助。
  • 你的意思是横断dom吗?或字符串格式化html代码?请提供更多信息。还有,你在用 jquery 吗?
  • 查看document.getElementsByTagName().innerHTML(或.textContent.innerText),以及for 循环。然后document.createElement().appendChild()(如果需要)
  • 这里有一个选项:jsfiddle.net/5S6WD
  • 这看起来很像家庭作业(:

标签: javascript html arrays string foreach


【解决方案1】:

在您的代码中使用唯一 ID 可以让这样的工作变得更加简单。

<ul id="myUL">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>etc</li>
 </ul>
<p id="myPara"></p>

javascript 看起来像这样

//Grab your ul element by id and then all the li tags within it.
var myArr = document.getElementById("myUL").getElementsByTagName("li");
//Grab your paragraph you wish to populate
var para = document.getElementById("myPara");
//Specify an output array
var output = [];

//Loop over your li's and grab the html content
for(var i=0; i<myArr.length; i++){
    output.push(myArr[i].innerHTML);
}

//Set the paragraph value by joining the outputs together 
para.innerHTML = output.join(", ");

这是一个有效的 jsFiddle - http://jsfiddle.net/GBdTM/

一些有用的参考资料

【讨论】:

  • 您的代码假设目标段落已经存在于 DOM 中,我认为这不是一个安全的假设。
  • @DerekHenderson 虽然这是一个公平的观点,但该段落包含在我的示例中,我觉得我已经提供了足够的细节来为用户指明正确的方向,而无需为每一种可能性编码。
  • @DerekHenderson 如果这是一个要求,也许问题作者应该包含它。
  • @VoronoiPotato & MarkWalters,公平点,这就是我没有投反对票的原因,但通常我觉得最好坚持指定的参数。
【解决方案2】:

您想选择有趣的元素,获取它们的文本,然后使用字符串", " 作为分隔符连接文本。

document.querySelectorAll获取元素:

var els = document.querySelectorAll("ul > li"); // ul > li is a "CSS selector"

通过遍历返回的NodeList,将元素集合转换为文本集合:

var text = [];
for (var i = 0; i < els.length; ++i) {
    text.push(els[i].textContent);
}

Array.join一起加入他们:

var joined = text.join(", ");

一些注意事项:

  • IE 不支持querySelectorAll
  • IE textContent,但旧版IE 可以使用innerText

【讨论】:

  • 我在小提琴中做了一些非常相似的事情,所以我就把它留在这里jsfiddle.net/Ap2bp/1
  • @NicoSantangelo 是的,喜欢 .children 或 .childNodes 可能更好用。
【解决方案3】:

这里不需要 JavaScript。一些 CSS 也会这样做,并保持更语义化的文档结构:

ul {
    display: block;
    padding: 0;
}
li {
    display: inline;
}
li:not(:last-child)::after {
    content: ", ";
}

(demo at jsfiddle.net)

【讨论】:

  • 如您所知,这并不能真正回答问题。是的,很容易将列表样式设置为内联逗号分隔列表,但也许有某些原因 OP 需要将列表的内容复制到段落中。
  • 我知道,请不要投反对票 :-) para.textContent = _.pluck(list.children, "textContent").join(", ") 似乎太琐碎了……
  • 大声笑,不,我无意投反对票。我只是希望任何对我的回答投反对票的人都能解释原因。
【解决方案4】:

希望这个小例子能给你一些工作。

$(document).ready(function () {
        var str = '';
        $('li').each(function () {
            str += $(this).text() + ', ';
        });

        //Remove the last two character
        str = str.slice(0, -2);

        //assign the string to the <p>
        $('p').text(str);
    });

jsFiddle Example

【讨论】:

    【解决方案5】:

    您可以使用 Jquery 轻松获取 -

    HTML -

     <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
        <li>etc</li>
     </ul>
    <span id="lstItem"></span>
    

    jQuery -

    $(document).ready(function(){
        var ListItem = "";
        $('ul li').each(function(){
          ListItem += $(this).text() + ", ";    
        });
    
        $('#lstItem').text(ListItem.substring(0,(ListItem.length - 2)));
    });
    

    Try - Jquery Demo

    使用 Javascript 的解决方案 -

    var listli = document.getElementsByTagName("li");
    var lstItem = [];
    for(var i=0; i<listli.length; i++){
        lstItem.push(listli[i].innerHTML);
    }
     var showlist = document.getElementById("lstItem");
     showlist.innerText = lstItem.join();
    

    Try With Javascript

    【讨论】:

    • 你为什么要使用 jQuery?,这不是问题,你没有解释它是什么,它不是真的必要,你的代码比它应该的更复杂。另外,不要使用大写变量,它们会被类弄错
    • 是的,我知道这个问题与“Jquery”无关,但“Jquery”是一个“Javascript”库,所以我在这里发布我的答案以提供帮助。并感谢您的建议。
    • 对不起,如果我有点苛刻。做同样事情的一个班轮可能是:$.map($('li'), function(li){ return li.textContent; }).join(", ") );
    【解决方案6】:

    只需获取 LI 的集合,连接它们的文本,然后插入您创建的 P 并附加到 BODY:

    var items = document.getElementsByTagName('li'),
        count = items.length,
        para = document.createElement('p'),
        str = items[0].innerHTML,
        i;
    
    for (i = 1; i < count; i += 1) {
        str += ', ' + items[i].innerHTML;
    }
    
    para.innerHTML = str;
    document.body.appendChild(para);
    

    Demo

    编辑: 现在是 2021 年,有更好的方法来做到这一点。

    const items = document.querySelectorAll('li');
    const stringifiedList = Array.from(items)
      .map(item => item.textContent)
      .join(', ');
    const para = document.createElement('p');
    
    para.textContent = stringifiedList;
    document.body.appendChild(para);
    

    【讨论】:

    • 请解释否决票。此代码完全按照 OP 的要求执行。
    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2021-11-12
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多