Добавьте <wbr>и многоточие к длинным ссылкам (связано с jquery.linkify) - PullRequest
1 голос
/ 04 мая 2011

Я использую "Linkify", чтобы добавить ссылки к статическому тексту ... Это то, что я использую:

https://github.com/maranomynet/linkify/blob/master/1.0/jquery.linkify-1.0.js

Я хотел бы добавить <wbr> (разрыв слова) после 15 символов и &hellip; после 30 или около того ... (если ссылка <30 символов, не добавляйте ...) </p>

Таким образом, ссылка будет чем-тонапример: https://github.com/mara<wbr></wbr>nomynet/linkify&hellip;

Полагаю, мне нужно работать с переменной "$ 2" в этом jquery.linkify-1.0.js, но я немного запутался в том, как это сделать ...

Любая подсказка?

Спасибо!

1 Ответ

3 голосов
/ 07 мая 2011

Я не претендую на звание мастера JavaScript / jQuery, но вот то, что я придумал, похоже, работает.Если у кого-то есть лучший метод для выполнения некоторых функций, я весь в ушах - я скорее человек из C #, поэтому Javascript / jQuery - слабое звено, которое я пытаюсь улучшить.

Шаг 1: Поместите этот кусок кода куда-нибудь, чтобы плагин linkify мог его прочитать (я поместил его в файл linkify).

function FormatLink(a) {
    // Configurable settings
    var wbrPosition = 15;
    var hellipPosition = 30;
    var wbr = '<wbr></wbr>';
    var hellip = '&hellip;';

    // Put the data into a span, makes it so we can alter it without losing surrounding text.
    var link = $('<span>' + a + '</span>');

    // If no href, this is not a URL. Pass it back.
    if (link.find('a').attr('href') == undefined) {
        return a;
    }

    jQuery.each(link.find('a'), function () {
        var original = $(this).html() + '</a>';
        var updated = $(this);
        // Set length
        var length = updated.html().length;

        if (length > hellipPosition) {
            updated.html(updated.html().substr(0, hellipPosition) + hellip);
        }

        if (length > wbrPosition) {
            updated.html(updated.html().substr(0, wbrPosition) + wbr + updated.html().substr(wbrPosition, length));
        }

        if (link.html() !== null && link.find('a').html() !== null && original !== null && updated.html() !== null) {
            var changes = link.html().replace(original, updated.html() + '</a>');
            if (changes !== null && changes !== '') {
                link.html(changes);
            }
        }
    });

    return link.html();
}

Шаг 2: Измените функцию linkify.Замените это:

  linkifier = function ( html ) {
      return html
                  .replace( noProtocolUrl, '$1<a href="<``>://$2">$2</a>$3' )  // NOTE: we escape `"http` as `"<``>` to make sure `httpOrMailtoUrl` below doesn't find it as a false-positive
                  .replace( httpOrMailtoUrl, '$1<a href="$2">$2</a>$3' )
                  .replace( /"<``>/g, '"http' );  // reinsert `"http`
    },

На это:

  linkifier = function (html) {
      return FormatLink(html
                  .replace(noProtocolUrl, '$1<a href="<``>://$2">$2</a>$3')  // NOTE: we escape `"http` as `"<``>` to make sure `httpOrMailtoUrl` below doesn't find it as a false-positive
                  .replace(httpOrMailtoUrl, '$1<a href="$2">$2</a>$3')
                  .replace(/"<``>/g, '"http'));  // reinsert `"http`
  },

Я протестировал несколько вариантов блоков кода, и все они, кажется, работают, поэтому дайте мне знать, если вы столкнетесь спример, который не работает.

...