【问题标题】:JavaScript - Get all but last item in arrayJavaScript - 获取数组中除最后一项之外的所有内容
【发布时间】:2011-03-13 23:11:34
【问题描述】:

这是我的代码:

 function insert(){
  var loc_array = document.location.href.split('/');
  var linkElement = document.getElementById("waBackButton");
  var linkElementLink = document.getElementById("waBackButtonlnk");
  linkElement.innerHTML=loc_array[loc_array.length-2];
  linkElementLink.href = loc_array[loc_array.length];
 }

我希望linkElementLink.href 获取除数组中最后一项之外的所有内容。现在它坏了,它之前的项目是倒数第二个项目。

【问题讨论】:

    标签: javascript dom


    【解决方案1】:

    我不太确定你想做什么。但是你可以使用slice 对数组进行切片:

    loc_array = loc_array.slice(0, -1);
    

    【讨论】:

    • 我想获取当前页面的 URL,只去掉最后一两个目录/页面而不是 /m/fares/pass/trans.html ill get m/fares/
    • @Bry4n:嗯,你可以使用slice 来做到这一点。只需使用要删除的项目数调整第二个参数即可。
    【解决方案2】:

    使用pathname 而不是href 仅检索链接的路径部分。否则,如果有?query#fragment 后缀,或者路径为/(无父路径),则会得到意想不到的结果。

    linkElementLink.href= location.pathname.split('/').slice(0, -1).join('/');
    

    (但是,你当然可以说:)

    linkElementLink.href= '.';
    

    不要这样做:

    linkElement.innerHTML=loc_array[loc_array.length-2];
    

    从任意字符串设置 HTML 是危险的。如果您从中获取此文本的 URL 包含 HTML 中的特殊字符,例如 <&,则用户可以注入标记。如果您可以在 URL 中获得 <script>(您不应该这样做,因为它是无效的,但某些浏览器可能会允许您这样做),那么您就会有跨站点脚本安全漏洞。

    要设置元素的文本,而不是 HTML,可以使用 document.createTextNode('string') 并将其附加到元素,或者分支代码以使用 innerText (IE) 或 textContent(其他现代浏览器)。

    【讨论】:

    • 你有一个关于附加和摆脱innerhtml的例子
    • 我将项目放在一个节点中的括号中,然后附加它。
    • 一种方法是element.innerHTML='';(首先清除它,如果它还不是空的),然后是element.appendChild(document.createTextNode(somestring));
    【解决方案3】:

    如果使用 lodash,可以使用 _.initial(array):

    _.initial(array):获取数组中除最后一个元素之外的所有元素。

    示例:

    _.initial([1, 2, 3]);
    // → [1, 2]
    

    【讨论】:

      【解决方案4】:

      根据您是否要重复使用该数组,您可以简单地使用一次pop() 方法来删​​除最后一个元素。

      【讨论】:

        【解决方案5】:

        linkElementLink.href = loc_array[loc_array.length]; 在数组中添加一个新的空槽,因为数组从 0 运行到 array.length-1;所以你返回一个空槽。

        linkElement.innerHTML=loc_array[loc_array.length-2]; 如果使用方括号,则只能获取一个索引的内容。我不确定这是否是你想要的?下一节将介绍如何获取多个索引。

        要获得 .href 所需的内容,您需要对数组进行切片。 linkElementLink.href = loc_array.slice(0,loc_array.length-1); 或使用负数从末尾数 linkElementLink.href = loc_array.slice(0,-1); 这是更快的方法。

        还请注意,当直接从数组中获取内容时,您将获得与 .toString() 方法相同的结果,即 item1、item2、item3。如果您不想要逗号,则需要使用.join()。就像array.join('-') 会返回 item1-item2-item3。这是所有数组方法http://www.w3schools.com/jsref/jsref_obj_array.asp 的列表。这是一个很好的资源。

        【讨论】:

        • 我在本地工作,但上面的脚本执行此 file:///C:/Documents%20and%20Settings/klgp/Desktop/Mobile/,,,C:,Documents%20and %20设置、klgp、桌面、移动
        • file:///C:/Documents%20and%20Settings/klgp/Desktop/Mobile/ 这是您的输入您想要输出什么?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        • 2018-07-10
        • 2014-02-09
        • 2015-08-21
        相关资源
        最近更新 更多