Укоротить хлебную крошку с помощью jQuery - PullRequest
0 голосов
/ 12 мая 2011

У меня есть следующий код для моих панировочных сухарей:

<a name="top"></a>
<a href="/index.html">Home</a>&nbsp;/&nbsp;
<a href="../../../../index.html">Level1</a>&nbsp;/&nbsp;
<a href="../../../index.html">Level2</a>&nbsp;/&nbsp;
<a href="../../index.html">Level3</a>&nbsp;/&nbsp;
<a href="../index.html">Level4</a>&nbsp;/&nbsp;
Page

Который производит: «Домой / Уровень1 / Уровень2 / Уровень3 / Уровень4 / Страница». Я хочу использовать javascript / jQuery, чтобы сократить его до «Home / Level1 [...] Page», где Home, Level1 и Page всегда отображаются независимо от количества других страниц. Но я не уверен, как взять вещи между ними.

Следующее срабатывает, только если уровень больше 1, но куда мне идти?

if ($('#wayfinding a').length > 2) {}

Ответы [ 3 ]

1 голос
/ 12 мая 2011

Попробуйте немного сложнее, но это должно сработать:

 <style type="text/css">
    .breadcrums 
    {
        width:500px;
    }
    .breadcrums li
    {
        list-style-type:none;
        display:inline;
    }
    </style>
    <script type="text/javascript">
        $(function () {
        var length =  $('.breadcrums li').length;
        $('.breadcrums li').each(function(n){
                if(n > 2 && n!=length-1){
                $(this).hide();
                }
            });        
        });
    </script>

<ul class="breadcrums">
<li> <a name="top"></a></li>
<li><a href="/index.html">Home</a>&nbsp;/&nbsp;</li>
<li><a href="../../../../index.html">Level1</a>&nbsp;/&nbsp;</li>
<li><a href="../../../index.html">Level2</a>&nbsp;/&nbsp;</li>
<li><a href="../../index.html">Level3</a>&nbsp;/&nbsp;</li>
<li><a href="../index.html">Level4</a>&nbsp;/&nbsp;</li>
<li>Page</li>
</ul>

Обновление 1: Основная причина заключить тег ссылки в li - это скрыть разделитель /.Без этого я не уверен, как вы получите этот текст.

Проверьте, соответствует ли эта версия вашим потребностям:

<div class="wayfinding">
<a name="top"></a>
<a href="/index.html">Home</a><span>&nbsp;/&nbsp;</span>
<a href="../../../../index.html">Level1</a><span>&nbsp;/&nbsp;</span>
<a href="../../../index.html">Level2 </a><span>&nbsp;/&nbsp;</span>
<a href="../../index.html">Level3 </a><span>&nbsp;/&nbsp;</span>
<a href="../index.html">Level4 </a><span>&nbsp;/&nbsp;</span>
Page
</div>

var length = $('.wayfinding a').length;
            $('.wayfinding a').each(function (n) {
                if (n > 2 && n != length) {
                    $(this).next().hide();
                    $(this).hide();
                }
                if (n == 2) {
                     $(this).next().after('<span>[...]&nbsp;/&nbsp;</span>');
                }
            });
0 голосов
/ 12 мая 2011

Это работает, хотя по общему признанию это не самое красивое решение:

if ($('#wayfinding a').length > 3) {
    var fullPath = $('#wayfinding').html(), breadcrumbs = fullPath, w = $('#wayfinding a').length;
    for (i=0;i<=w-1;i++) {
        breadcrumbs = breadcrumbs.replace('</a>','QQQQQ');
        if (i==1) { breadcrumbs = breadcrumbs.replace('</a>&nbsp;/&nbsp;','</a>&nbsp;/&nbsp;<span class="hiddenCrumbs">'); }
        if (i==w-2) { breadcrumbs = breadcrumbs.replace('</a>','</a></span>'); }
        if (i==w-1) { breadcrumbs = breadcrumbs.replace(/QQQQQ/g,'</a>'); }
    }
    $('#wayfinding').html(breadcrumbs);
    $('.hiddenCrumbs').html('[...]').click(function() {
        $('#wayfinding').html(fullPath);
    });
}
0 голосов
/ 12 мая 2011

Можете ли вы добавить селекторы или вообще изменить HTML?Завершение каждого уровня хлебных крошек сделало бы это намного проще.

Измененный HTML

<div id="wayfinding">
    <a name="top"></a>
    <div class="level"><a href="/index.html">Home</a></div>
    <div class="level"><a href="../../../../index.html">Level1</a>&nbsp;/&nbsp;</div>
    <div class="level"><a href="../../../index.html">Level2</a>&nbsp;/&nbsp;</div>
    <div class="level"><a href="../../index.html">Level3</a>&nbsp;/&nbsp;</div>
    <div class="level"><a href="../index.html">Level4</a>&nbsp;/&nbsp;</div>
    Page
</div>

JS

$('#wayfinding .level:not(:first)').remove();
$('#wayfinding .level:last').after('[...]');
...