Добавить TM к тексту с помощью jQuery? - PullRequest
2 голосов
/ 03 декабря 2009

Мне нужен способ просмотреть весь текст на моей странице, включая ссылки и другие элементы управления, найти слова в определенном списке и добавить к ним символьную сущность html ™ (& trade;). Мне нужно, чтобы это тоже было быстро. Список содержится в массиве javascript. У меня уже есть код, использующий .each, чтобы найти все ссылки на странице с текстом из этого списка, но он заметно медленный, и мне это не нравится.

Есть ли лучшие, более эффективные способы сделать это?

EDIT

Люди предлагают другие альтернативы (на стороне сервера, CSS и т. Д.) Мы не можем использовать их, потому что эти слова есть в URL по всему сайту. Мы бы испортили наши URL по всему сайту. Мы используем DotNetNuke для этого, и клиент только что сказал нам сегодня, что каждый раз, когда их продукты появляются на всем сайте (включая ссылки), они хотят, чтобы они были во всех заглавных буквах и добавлялись в TM. Если мы изменим продукты в базе данных, все ссылки внезапно добавятся к концу. Природа DNN говорит, что мы не можем сделать это на стороне сервера. Мы могли бы пройти и вручную изменить его на каждой странице ... но сайт составляет более 1900 страниц ... ТАК! Клиентская сторона - это маршрут, по которому мы хотим идти.

Ответы [ 5 ]

4 голосов
/ 03 декабря 2009

Вы можете сделать что-то подобное:

$body = jQuery("body");
var words= ["blah", "blog", "blig"];
for(var i=0; i< words.size; i++){
   $body.replace(words[i],words[i]+"&trade");
}

edit: использование цикла for вместо foreach или .each немного увеличит время рендеринга, как описано в этом техническом докладе Google .

НО я бы не стал делать это и попробовал бы решение на стороне сервера.

Просмотр всех узлов, чтобы найти определенное слово, безумно дорог с точки зрения вычислительной мощности. Время загрузки также сильно зависит от компьютера клиента.

3 голосов
/ 03 декабря 2009

Делайте это на стороне сервера, всегда быстрее и надежнее.

1 голос
/ 03 декабря 2009

Выполните поиск / замену регулярных выражений. Теоретически, это должно быть быстрее, чем метод Маркга, поскольку вы касаетесь DOM только один раз.

var wordList = ["jQuery UI", "jQuery", "is"];
var regExp = new RegExp("\\b" + wordList.join("\\b|\\b") + "\\b", "g");
var $elem = $("#divWithText");
console.log(regExp);
$elem.html($elem.html().replace(regExp, "$&&trade;"));

Предостережение:

  1. Это также уничтожит любые сценарии, которые могут быть внутри div, так как элементы сценария не пересматриваются.
  2. То же относится и к любому тегу html, соответствующему вашему регулярному выражению.
1 голос
/ 03 декабря 2009

Вы также можете использовать CSS, хотя вам нужно будет оборачивать каждое вхождение имени в тег HTML:

.tm:after {
  /* HTML entities don't work here but unicode entities like \u0123 do */
  content: "™"; 
}

Lorem ipsum <span class="tm">The Company</span> etc etc

Преимущество в том, что вы можете легко менять стили, цвета и т. Д.

0 голосов
/ 03 декабря 2009

Я не знаю .NET, но должна быть возможность как-то сделать это на стороне клиента без необходимости работать с самой платформой. Решение на стороне клиента звучит очень плохо для моих ушей.

В PHP вы можете хранить выходной буфер и выполнять над ним операции до его очистки. Там должно быть что-то подобное. Операция Regex или DOM, которая заменяет все содержимое вне тегов (и, возможно, внутри атрибутов alt), должна работать быстро и чисто.

В дополнение к тому, что уже было написано, на ум приходит еще два недостатка:

  • Названия продуктов индексируются в поисковых системах без ТМ.
  • Тег <title> также необходимо изменить
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...