Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как модифицировать скрипт добавляющий текст источник при копировании (https://javascript.ru/forum/misc/59647-kak-modificirovat-skript-dobavlyayushhijj-tekst-istochnik-pri-kopirovanii.html)

ondater 20.11.2015 16:30

Как модифицировать скрипт добавляющий текст источник при копировании
 
Имеется вот такой скрипт:

<script>
    document.oncopy = function () {
      var bodyElement = document.body;
      var selection = getSelection();
      var href = document.location.href;
      var copyright = "<br>Источник: example.com";
      var text = selection + copyright;
      var divElement = document.createElement('div');
      divElement.style.position = 'absolute';
      divElement.style.left = '-99999px';
      divElement.innerHTML = text;
      bodyElement.appendChild(divElement);
      selection.selectAllChildren(divElement);
      setTimeout(function() {
        bodyElement.removeChild(divElement);
      }, 0);
    };
  </script>


Он добавляет строку текста "Источник: example.com" при копировании текста с сайта. Строка источник, добавляется после скопированного текста.

Как сделать так, чтобы текст "Источник: example.com" добавлялся при копировании в середину текста, например после первого или второго предложения, которое заканчивается точкой "."

рони 20.11.2015 17:19

ondater,
на каждую защиту, найдётся лом ... но если так спокойнее
var text = (''+selection).split('.').join(copyright);

ondater 20.11.2015 18:43

Цитата:

Сообщение от рони (Сообщение 396922)
ondater,
на каждую защиту, найдётся лом ... но если так спокойнее
var text = (''+selection).split('.').join(copyright);

Понимаю, но моей целью является усложнить жизнь копипастеру.

Кстати, после вставки этого кода, текст вставляется после каждой точки, а нужно только после первой, так можно сделать?

рони 20.11.2015 19:20

Цитата:

Сообщение от ondater
так можно сделать?

:-?
var text = (''+selection).replace('.',copyright);

ondater 20.11.2015 21:23

Цитата:

Сообщение от рони (Сообщение 396933)
:-?
var text = (''+selection).replace('.',copyright);

Спасибо! Похоже, это именно то, что мне нужно :yes:

Arroyo 03.02.2017 17:18

Здравствуйте.
Спасибо, как раз искал тоже самое. Но теперь хочу изменить.

Я хочу указать массив из нескольких слов. Если какие-то из них существуют в скопированном тексте, то последнее из них становится ссылкой, если ни одного слова нет, то ссылка ставится в конце.
Если не труд прошу помочь с кодом. Спасибо.

И еще вопрос: в приведенном примере (''+selection). Что это значит? зачем тут кавычки?

рони 03.02.2017 17:35

Цитата:

Сообщение от Arroyo
зачем тут кавычки?

это один из способов, как можно обьект превратить в строку.
с остальным учебник вверху https://learn.javascript.ru/string

Arroyo 04.02.2017 16:00

Цитата:

Сообщение от рони (Сообщение 443092)
с остальным учебник вверху https://learn.javascript.ru/string


Почитал, не особо получается. Последнее нужное слово становится ссылкой, но теперь скопированный текст вставляется вместе с
<div style="position: absolute; left: -99999px;">
соответственно редактор ничего не видит

document.oncopy = function () {
    var bodyElement = document.body;
    var selection = getSelection();
    var href = document.location.href;
    var copyright = "<a href='"+document.location.href+"'>Собака</a>";
    var pos = (''+selection).lastIndexOf("Собака");
      
    String.prototype.replaceAt=function(index, character) {
        return this.substr(0, index) + character + this.substr(index+6);
    }
    
    var text = (''+selection).replaceAt(pos, copyright);
    var divElement = document.createElement('div');
    divElement.style.position = 'absolute';
    divElement.style.left = '-99999px';
    divElement.innerHTML = text;
    bodyElement.appendChild(divElement);
    selection.selectAllChildren(divElement);
    setTimeout(function() {
    bodyElement.removeChild(divElement);
    }, 0);
};

рони 04.02.2017 16:16

Arroyo,
текст можно заменить, только на текст.

Arroyo 04.02.2017 17:22

спасибо. подскажите, как правильно это написать.


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