заменить () или обернуть () http://name.tld/request_url?parameter на <a href="this"> ... </a>? - PullRequest
2 голосов
/ 01 сентября 2010

Есть ли лучший способ заменить / обернуть текст h*tp://name.tld/request_url?parameter или h*tps://name.tld/request_url?parameter в некоторых HTML-элементах на <a href>.

Вот мой код:

jQuery('#posts .post').each(function() {
  elem = jQuery(this);
  elem.html(
    elem.text()
    .replace(/(http?:\/\/?\S+)/g, "<a href='$1'>$1</a>")
  );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="posts">
  <div class="post">
    Tweet text 1 http://google.com and other text.
  </div>
  <div class="post">
    Tweet text 2 https://www.google.com and other text.
  </div>
  <div class="post">
    Tweet text 3
  </div>
  <div class="post">
    ...
  </div>
</div>

Любая альтернатива jQuery.wrap() тоже подойдет.

1 Ответ

4 голосов
/ 01 сентября 2010

Нет лучшего способа, хотя вы можете немного упростить его, например:

jQuery('#posts .post').each( function () {
  jQuery(this).html(function(i, html) {
    return html.replace(/(http?:\/\/?\S+)/g, "<a href='$1'>$1</a>");
  }); 
});

Используйте этот подход только , если вы уверены, что сообщения уже не содержат HTML, в противном случае используйте то, что у вас есть.

jQuery работает с узлами DOM, а не с текстом внутри узлов, или, скорее, так как это всего лишь JavaScript ... но он не предоставляет много дополнительных функций для этого. jQuery, включая .wrap(), фокусируется на манипулировании DOM, а не на тексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...