2012-04-01 1 views
1

Я хотел бы создать букмарклет javascript, который обменивает весь текст на любом веб-сайте (или большинстве текстов на большинстве сайтов) на другую строку одинаковой длины, сохраняя при этом форматирование сайта.Как создать букмарклет, чтобы изменить весь текст на веб-сайте на другой текст с аналогичной длиной?

Подумайте о замене всего текста на nytimes.com слоем «Lorem Ipsum» без существенного изменения длины текста.

Код должен быть способен работать как букмарклет, а также как встраиваемая кнопка.

Содержание как это:

<h2>Police Are Using Phone Tracking as a Routine Tool</h2> 
<p class="author">By <span class="name">Eric Lichtblau</span></p> 
<p>Law enforcement tracking of cellphones is a convenient surveillance tool in many situations, but it is unclear if using such technology without a warrant violates the Constitution.</p> 

будет изменен в этом:

<h2>Lorem ipsum dolor sit amet, consectetur adipisicing</h2> 
<p class="author">Sed <span class="name">Consectetur Adipisicing</span></p> 
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat. Duis aute irure dolor in reprehenderit in voluptate velit.</p> 

Текст, который используется для замены исходного контента будет предопределен.

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

Я благодарен за любые указатели и с удовольствием рисую материал для себя.

+2

И в чем ваш вопрос? – Zirak

+0

Я отредактировал заголовок, чтобы содержать актуальный вопрос. – Florian

+1

Что значит * how *? Мы не будем писать это для вас. С какими трудностями вы сталкиваетесь? [Что вы пробовали?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) Это не завод по производству дисков. – Zirak

ответ

1

У вас, вероятно, недостаточно места в букмаркете, чтобы включить Lorem Ipsum в качестве строкового литерала. Я бы предложил сохранить Lorem Ipsum в txt-файле на каком-то сервере, а затем запросить его с помощью Ajax. Когда приходит ответ, сохраните его в строковой переменной s и инициализируйте целое число i = 0, мы будем использовать его для итерации по этой строке.

Затем перейдите к дереву DOM веб-страницы. Всякий раз, когда вы сталкиваетесь с текстовым узлом, сделайте следующее: Измерьте его длину (назовем его len). Затем замените текст в этом узле на s.slice(i, i + len), то есть точно len символов из Lorem Ipsum, хранящихся в строке s. Поэтому текст заменяется частью Lorem Ipsum той же длины. Наконец, увеличьте итератор: i += len, потому что мы не хотим заменять каждый текстовый узел той же частью.

Когда i превышает s.length, просто повторно инициализируйте его до 0.

Обход дерева DOM может быть реализован с помощью рекурсивной функции. Назовем это traverse(element). Функция будет проверять, содержит ли текст element текст - если да, замените его на Lorem Ipsum. Затем итерации в течение цикла через всех детей element (если они есть) и вызовите traverse() для каждого из них. С traverse() функции реализована рекурсивно, как это, вы будете иметь только назвать его однажды: traverse(document.body);

Наконец, если вам нужны некоторые учебники:

AJAX Основы: http://www.w3schools.com/ajax/default.asp (и последующими главы)

DOM дерево : http://www.w3schools.com/htmldom/default.asp (и следующие главы)

+0

Это полезно. Спасибо! Являются ли w3schools хорошо уважаемыми в сообществе JS? Я делаю много работы с интерфейсом HTML/CSS, а сайт w3schools предлагает некоторые из худших документов по ним. – Florian

+0

Сайт охватывает только основы всех аспектов веб-разработки, в том числе JS. Так что нет, вы не можете овладеть JS только чтением w3schools. Может быть, у них есть более продвинутые уроки на оплачиваемых курсах, я не знаю. – Imp