【问题标题】:How To Display Breadcrumbs from Right to Left using JS?如何使用JS从右到左显示面包屑?
【发布时间】:2012-11-29 20:58:04
【问题描述】:

如何从右到左显示面包屑导航菜单?

例如:

document.title «myPage«Home

我正在使用下面从左到右显示的脚本,但我无法弄清楚如何正确操作它。

<script language="JavaScript">
<!-- 
  function breadcrumbs(){
    sURL = new String;
    bits = new Object;
    var x = 0;
    var stop = 0;
    var output = "<div class=topnav><A HREF=/>Hyperdisc</A> &raquo; ";

    sURL = location.href;
    sURL = sURL.slice(8,sURL.length);
    chunkStart = sURL.indexOf("/");
    sURL = sURL.slice(chunkStart+1,sURL.length)

    while(!stop){
      chunkStart = sURL.indexOf("/");
      if (chunkStart != -1){
        bits[x] = sURL.slice(0,chunkStart)
        sURL = sURL.slice(chunkStart+1,sURL.length);
      }else{
        stop = 1;
      }
      x++;
    }

    for(var i in bits){
      output += "<A HREF=\"";
      for(y=1;y<x-i;y++){
        output += "../";
      }
      output += bits[i] + "/\">" + bits[i] + "</A> &raquo; ";
    }
    document.write(output + document.title);
    document.write("</div>");
  }
 // -->
</script>

其中显示:

Home» myPage» 文档.title

【问题讨论】:

    标签: javascript html menu breadcrumbs right-to-left


    【解决方案1】:

    你不需要 JS。你需要的是direction CSS 属性。这是测试用例http://jsbin.com/welcome/55152/editSupport for direction property is good

    主要有以下几点:

    ul {
      direction: rtl;
    }
    li { display: inline; }
    a { display: inline-block; }
    

    更新如果你绝对必须使用 JS,这里是简单的 sn-p:

    var list = document.getElementById('nav'),
        lis = document.querySelectorAll('li'),
        l = lis.length - 1,
        i,
        newList = document.createElement('ul');
    
    for(i = l; i >= 0; i--) {
      newList.appendChild(lis[i]);
    }
    list.parentNode.replaceChild(newList, list);
    

    sn-p 假设标记如下:

    <ul id="nav">
      <li><a href="#">Home</a></li>
      <li><a href="#">myPage</a></li>
      <li>Document</li>
    </ul>
    

    测试用例在这里——http://jsbin.com/welcome/55163/edit

    为实际的 sn-p 更新

    当涉及到问题中的实际代码时,您可能希望用这个 sn-p 替换最后一个 for() 循环中的所有内容:

    document.write(output + document.title);
    for(var i = bits.length - 1; i >= 0; i--){
      output += "&laquo; <A HREF=\"";
      for(y=1;y<x-i;y++){
        output += "../";
      }
      output += bits[i] + "/\">" + bits[i] + "</A>";
    }
    document.write("</div>");
    

    【讨论】:

    • JS 是动态的。例如:如果用户从主页单击 pg2,则会显示: Home>pg2 然后单击 pg3 = Home>pg2>pg3 click back to home = Home> 然后单击 pg4 = Home>pg4 然后单击 pg2 = Home> pg4>pg2 CSS 是硬编码的
    • 对不起,我可能会混淆这些东西,但我看不出面包屑的动态特性与上面的 CSS 解决方案有何冲突。我认为如何构建面包屑超出了“如何从右到左显示面包屑”问题的范围。 CSS 准确地向您展示了如何“从右到左显示”。但是构建面包屑是完全不同的事情。
    • @Andaero,我已经根据您的示例代码使用代码 sn-p 扩展了答案。请检查一下。
    • 您的示例是一个简单的水平导航栏。当您单击“主页”时,应删除 myPage。您的列表是硬编码的;想象一下必须编写数百个链接......当用户单击链接并根据需要从面包屑路径中添加/减去链接时,JS 会动态创建链接 - 真正的面包屑导航栏
    • @Andaero 我仍然认为您的问题误导了您。你问的是展示,但你的意思是建造。您的代码中没有关于单击或任何其他事件的内容。所以,我认为我的回答完全满足了“如何从右到左显示面包屑导航菜单?”的问题。即使使用 JS 和自定义您的实际代码。我提供的代码不依赖于你构建面包屑的方式,所以你可以硬编码,你可以让那些动态的你可以做任何你想做的事情。但无论如何,我没有太多时间来帮助解决误导性问题,抱歉。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多