Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Изменение цвета слова на странице (https://javascript.ru/forum/dom-window/40251-izmenenie-cveta-slova-na-stranice.html)

archer 29.07.2013 17:35

Изменение цвета слова на странице
 
Пожалуйста подскажите скрипт который изменял бы цвет какого либо слова повторяющегося на всей странице к примеру слово - приложение
Пример:

Инженерия программного обеспечения (англ. Software Engineering) — приложение систематического, дисциплинного, измеримого подхода к развитию, оперированию и обслуживанию программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению.

2) И еще такой скрипт который при нахождении какого либо набора символов закрашивал бы в определенный цвет всю строку что сделует за ними и сами символы к примеру символы %!%
Пример:

Инженерия программного обеспечения (англ. Software Engineering) — приложение систематического, дисциплинного, измеримого подхода к развитию,%!% оперированию и обслуживанию программного обеспечения, а также исследованию этих подходов; то есть,
приложение дисциплины инженерии к программному обеспечению.

3) И подобный скрипт но что бы закрашивал весь текст находящийся между двумя наборами символов открывающим %( и закрывающим )% как коментарии.
Пример:

Инженерия программного обеспечения (англ. Software Engineering) — приложение систематического, дисциплинного, измеримого подхода к развитию, оперированию и обслуживанию программного обеспечения,%( а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению. )%

Я попытался честно говоря сам сделать но как то не получилось у меня. Пока что не тот уровень знаний. Буду очень благодарен за помощь! И еще желательно было бы добавить небольшое описание к скрипту чтобы я потом смог в нем все таки разобраться и понять что к чему.

T-sh 29.07.2013 17:45

бесплатно это вам не сделают. Одно дело помочь человеку (подсказать, исправить, направить в нужную сторону), а другое — сделать за него работу.

zilker 29.07.2013 18:26

Вы просите готовый скрипт с нуля.

Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа".

Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела.

archer 29.07.2013 19:26

Ну срабатывать этот скрипт по идеи должен при загрузке страницы
<head>
<script>
function tags(){
var kw = "приложение";
Здесь код
}
</script>
</head>
<body onload="tags()">
</body>


Вот только как организовать этот код ума не приложу) Я мог бы взять и изменить допустим цвет всего абзаца с указанным ID или еще какие то свойства целого элемента. Но как взять и изменить отдельное слово ума не приложу, по сути мне только этот момент и нужно объяснить желательно на примере и с коментариями. У меня цель не просто скопировать готовый скрипт но еще и разобраться в нем что бы в будущем таких вопросов не возникало.

Вот объясните мне как взять и организовать поиск слова на ВСЕЙ странице и что бы после нахождения тут же обратиться к свойству данной строки и изменить ее цвет. Как я понял функция match() по идеи должна заниматься поиском совпадений в строке но как при этом цвет поменять? С этим я окончательно запутался.

рони 29.07.2013 22:16

Цитата:

Сообщение от archer
как взять и изменить отдельное слово

найти все текстовые ноды и проверить их содержимое на искомое разбить на три части 1текст_до 2искомое 3 текст_после - 1 часть вернуть текстовой ноде ,создать новую текстовую ноду и вторую часть добавить неё , саму ноду заключить в тег с определённым классом и добавить его после текстовой ноды old, создать новую текстовую ноду и третью часть добавить в неё и саму ноду добавить после нового тега, вот примерно так
:write:

archer 29.07.2013 22:26

Цитата:

Сообщение от рони (Сообщение 264965)
найти все текстовые ноды и проверить их содержимое на искомое разбить на три части 1текст_до 2искомое 3 текст_после - 1 часть вернуть текстовой ноде ,создать новую текстовую ноду и вторую часть добавить неё , саму ноду заключить в тег с определённым классом и добавить его после текстовой ноды old, создать новую текстовую ноду и третью часть добавить в неё и саму ноду добавить после нового тега, вот примерно так
:write:

А еще можно взять ноду текста определенного элемента определенной строки и записав ее в переменную применить к ней replace(); )
С этим я разобрался. Но вот по ВСЕЙ странице такой трюк провернуть будет напряжно особенно с учетом того что страница будет регулярно дополняться новой инфой.

bes 29.07.2013 23:37

можно попробовать отсюда
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<body>
Инженерия программного обеспечения (англ. Software Engineering) — приложение систематического, дисциплинного, измеримого подхода к развитию, оперированию и обслуживанию программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению.
<div>
Инженерия программного обеспечения (англ. Software Engineering) — Приложение систематического, дисциплинного, измеримого подхода к развитию, оперированию и обслуживанию программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению.
</div>
<script>
jQuery(function () {
	var body = $("body");
	var text = body.html().replace(/([Пп]риложение)/g, "<b>$1</b>");
	body.html(text);
});
</script>


UPD: забыл сказать, конкретно при таком способе могут пострадать обработчики

рони 30.07.2013 01:12

Выделение слов на странице
 
:write: ... нагуглено и модернизировано ... http://javascript.ru/forum/jquery/12...html#post72373...почти рабочий код)))
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="https://code.jquery.com/jquery-1.9.1.js"></script>
  <script>
jQuery.fn.highlight = function (d, g) {
    function f(a, c) {
        if (3 == a.nodeType) {
            var e = jQuery("<div><\/div>").text(a.data).html();
            jQuery(a).replaceWith(e.replace(h, '<span class="' + b.className + '">$1<\/span>'))
        } else if (1 == a.nodeType && a.childNodes && !/(script|style|img|input)/i.test(a.tagName) && a.className != b.className)
            for (var e = a.childNodes.length, d; d = a.childNodes[--e];) f(d, c)
    }
    var b = {
        split: " ",
        className: "highlight",
        caseSensitive: !1,
        strictly: !1,
        remove: !0
    }, b = jQuery.extend(b, g);
    b.remove && $("." + b.className).each(function () {
        $(this).replaceWith($(this).text())
    });
    var c = b.strictly ? "" : "\\S*",
        h = RegExp("(" + c + d.replace(RegExp(b.split, "g"), c + "|" + c) + c + ")", (b.caseSensitive ? "" : "i") + "g");
    return this.each(function () {
        f(this, d)
    })
  };
  </script>
  <style type="text/css">
span.highlight {color:red}
  </style>
</head>

<body>
  <div >
    Вот только как организовать этот код ума не приложу)
    Я мог бы взять и изменить допустим цвет всего абзаца
    с указанным ID или еще какие то свойства целого
    элемента. Но как взять и изменить отдельное слово
    ума не приложу, по сути мне только этот момент и
    нужно объяснить желательно на примере и с
    коментариями. У меня цель не просто скопировать
    готовый скрипт но еще и разобраться в нем что бы в
    будущем таких вопросов не возникало. Вот объясните
    мне как взять и организовать поиск слова на ВСЕЙ
    странице и что бы после нахождения тут же
    обратиться к свойству данной строки и изменить ее
    цвет. Как я понял функция match() по идеи должна
    заниматься поиском совпадений в строке но как при
    этом цвет поменять? С этим я окончательно запутался.
  </div>

  <form>
    <input id="pattern" name="" value="вот поиск слов"><label> слова через пробел</label><br>
    <input id="right" name="" type="checkbox"><label>точное совпадение</label><br>
    <input id="case" name="" type="checkbox"><label>зависит от регистра</label><br>
    <input id="remove" name="" type="checkbox"><label>не убирать предыдущее выделение</label><br>
    <input id="scan" name="" type="button" value="scan">
    <script>
$('#scan').click(function () {
        var settings = {};
        var pattern = $('#pattern').val();
        $("#right").prop("checked") && (settings.strictly = true);
        $("#case").prop("checked") && (settings.caseSensitive = true);
        $("#remove").prop("checked") && (settings.remove = false);
        pattern && $("div").highlight(pattern, settings)
    })
    </script>
  </form>
</body>
</html>

archer 30.07.2013 10:43

Цитата:

Сообщение от bes (Сообщение 264977)
можно попробовать отсюда
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<body>
Инженерия программного обеспечения (англ. Software Engineering) — приложение систематического, дисциплинного, измеримого подхода к развитию, оперированию и обслуживанию программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению.
<div>
Инженерия программного обеспечения (англ. Software Engineering) — Приложение систематического, дисциплинного, измеримого подхода к развитию, оперированию и обслуживанию программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению.
</div>
<script>
jQuery(function () {
	var body = $("body");
	var text = body.html().replace(/([Пп]риложение)/g, "<b>$1</b>");
	body.html(text);
});
</script>


UPD: забыл сказать, конкретно при таком способе могут пострадать обработчики

Проверил рабочий вариант и в принципе вроде бы разобрался) записываем страницу в переменную потом ищем и заменяем слово и редактируем страницу) но вот в строчке
var text = body.html().replace(/([Пп]риложение)/g, "<b>$1</b>");
я не понял что значит это $1 ? Разве там не должно быть слово "приложение"?

ksa 30.07.2013 11:23

Цитата:

Сообщение от archer
я не понял что значит это $1 ?

Это значение "содержимого первой запоминаемой скобки"...

Цитата:

Сообщение от archer
Разве там не должно быть слово "приложение"?

Там будет "содержимое первой запомненой скобки"...

Цитата:

(x)
Находит x и запоминает. Это называется "запоминающие скобки". Например, /(foo)/ найдет и запомнит 'foo' в "foo bar." Найденная подстрока хранится в массиве-результате поиска или в предопределенных свойствах объекта RegExp: $1, ..., $9.Кроме того, скобки объединяют то, что в них находится, в единый элемент паттерна. Например, (abc)* - повторение abc 0 и более раз.
http://javascript.ru/regexp


Часовой пояс GMT +3, время: 00:29.