Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.08.2013, 23:58
Аватар для inet_boy
Интересующийся
Отправить личное сообщение для inet_boy Посмотреть профиль Найти все сообщения от inet_boy
 
Регистрация: 31.10.2012
Сообщений: 24

Работа JavaScript в определенном DIV
Прошу помощи у знающих, приведу сразу пример:
на сайте подключен js код который при копировании текста с сайта добаляет ссылку на источник, работой скрипта доволен, но есть одно НО
данный скрипт добаляет ссылку на источник к любому тексту скопированому с сайта, НУЖНО сделать чтобы данный скрипт отрабатывал при условии если текст копируется со станицы заключенной в div к примеру <div class="my_text">текст текст текст</div>

... вероятно там небольшое условие, но с моими зананиями JS это трудно
заранее спасибо всем откликнувшимся
Ответить с цитированием
  #2 (permalink)  
Старый 12.08.2013, 00:39
Аватар для inet_boy
Интересующийся
Отправить личное сообщение для inet_boy Посмотреть профиль Найти все сообщения от inet_boy
 
Регистрация: 31.10.2012
Сообщений: 24

даже если делать так document.getElementById('post');
то скрипт отрабатывает на всей странице
если на странице есть div id="post"

Последний раз редактировалось inet_boy, 12.08.2013 в 00:43.
Ответить с цитированием
  #3 (permalink)  
Старый 12.08.2013, 02:24
Интересующийся
Посмотреть профиль Найти все сообщения от moskitos80
 
Регистрация: 11.08.2013
Сообщений: 28

Приведите код скрипта, устанавливающего ссылку на источник.
Ответить с цитированием
  #4 (permalink)  
Старый 12.08.2013, 02:26
Аватар для inet_boy
Интересующийся
Отправить личное сообщение для inet_boy Посмотреть профиль Найти все сообщения от inet_boy
 
Регистрация: 31.10.2012
Сообщений: 24

function addLink() {
	var body_element = document.getElementsByTagName('body')[0];   
	var selection;   
	selection = window.getSelection();   
	var pagelink = "<br/>Источник: "+window.location+"";
	var copytext = selection + pagelink;   
	var newdiv = document.createElement('div');   
	newdiv.style.position='absolute';   
	newdiv.style.left='-99999px';   
	body_element.appendChild(newdiv);   
	newdiv.innerHTML = copytext;   
	selection.selectAllChildren(newdiv);   
	window.setTimeout(function() {   
		body_element.removeChild(newdiv);   
	},0);   

}   
document.oncopy = addLink;
Ответить с цитированием
  #5 (permalink)  
Старый 12.08.2013, 03:09
Интересующийся
Посмотреть профиль Найти все сообщения от moskitos80
 
Регистрация: 11.08.2013
Сообщений: 28

Боюсь, код вашего скрипта не кросс-браузерный, хотя может я ошибаюсь. Вот переделал ваш скрипт, теперь вы можете вызвать ф-цию addLink, передав ей имя нужного класса элементов.

<!doctype html>
<html>
<head>
    <title>;)</title>
    <meta charset="utf-8">
    <style type="text/css"></style>	
</head>
<body>

    <div class="text1">Этот текст скопируется без ссылки</div>
    <div class="text2">И этот текст скопируется без ссылки</div>
    <div class="my_text">А этот текст скопируется со ссылкой</div>
    
    <script type="text/javascript">
    
    // Определение ф-ции
    var addLink = (function (G) {    
        return function (targetClass) {    
        
            G.document.oncopy = function () {
            
                var body_element    = document.body,
                    selection       = window.getSelection(),
                    pagelink        = "<br/>Источник: " + window.location,
                    copytext        = selection + pagelink,
                    newdiv          = document.createElement('div');
                    
                if (selection.anchorNode.parentNode && 
                    selection.anchorNode.parentNode.className && 
                    selection.anchorNode.parentNode.className !== targetClass) {
                    return;
                }        

                newdiv.style.position   = "absolute";   
                newdiv.style.left       = "-99999px";  
                
                body_element.appendChild(newdiv);  
                
                newdiv.innerHTML = copytext;   
                selection.selectAllChildren(newdiv);        
                
                window.setTimeout(function() {   
                    body_element.removeChild(newdiv);   
                }, 0);
            };
        };
    } (this));
    
    // Вызов.
    // Вызывать 1 раз на странице! 
    // Передавать имя класса элементов, при копировании из которых нужно
    // Вставлять ссылку.
    addLink("my_text"); 

    </script>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 12.08.2013, 03:25
Аватар для inet_boy
Интересующийся
Отправить личное сообщение для inet_boy Посмотреть профиль Найти все сообщения от inet_boy
 
Регистрация: 31.10.2012
Сообщений: 24

Огромное вам человеческое спасибо!
сталкнулся со следующей проблемой, в div есть вложеный div с id новости, получается <div class="my_text"><div class="news_777"> ...
таким образом не отрабатывает скрипт так как в диве еще один див
Ответить с цитированием
  #7 (permalink)  
Старый 12.08.2013, 03:29
Аватар для inet_boy
Интересующийся
Отправить личное сообщение для inet_boy Посмотреть профиль Найти все сообщения от inet_boy
 
Регистрация: 31.10.2012
Сообщений: 24

узнать class встроенного дива можно, поколупать дивгло и передавать его в скрипт, хотелось бы не размахивать блоки JS в каждой новости а просто подключать его строкой <script type="text/javascript" src=" ... в посте
Ответить с цитированием
  #8 (permalink)  
Старый 12.08.2013, 03:37
Интересующийся
Посмотреть профиль Найти все сообщения от moskitos80
 
Регистрация: 11.08.2013
Сообщений: 28

Держите

<!doctype html>
<html>
<head>
    <title>;)</title>
    <meta charset="utf-8">
    <style type="text/css"></style>	
</head>
<body>

    <div class="text1">Этот текст скопируется без ссылки</div>
    <div class="text2">И этот текст скопируется без ссылки</div>
    <div class="my_text">
        <div class="news_777">
            А этот текст скопируется со ссылкой
        </div>
    </div>
    <div class="my_text">
        <div class="news_77">
            <div>
                <div class="news_777">
                    И этот текст скопируется со ссылкой
                </div>
            </div>
        </div>
    </div>
    
    <script type="text/javascript">
    
    // Определение ф-ции
    var addLink = (function (G) {    
        return function (targetClass) {    
        
            G.document.oncopy = function () {
            
                var body_element    = this.body,
                    selection       = G.getSelection(),
                    pagelink        = "<br/>Источник: " + G.location,
                    copytext        = selection + pagelink,
                    newdiv          = this.createElement('div'),
                    checkNode       = function (node) {
                        while (null !== node) {
                            if (node.className && node.className === targetClass) {
                                return true;
                            }
                            node = node.parentNode || null;
                        }
                        return false;
                    };
                    
                if (false === checkNode(selection.anchorNode.parentNode)) {
                    return;
                }
                
                newdiv.style.position   = "absolute";   
                newdiv.style.left       = "-99999px";  
                
                body_element.appendChild(newdiv);  
                
                newdiv.innerHTML = copytext;   
                selection.selectAllChildren(newdiv);        
                
                G.setTimeout(function() {   
                    body_element.removeChild(newdiv);   
                }, 0);
            };
        };
    } (this));
    
    // Вызов.
    // Вызывать 1 раз на странице! 
    // Передавать имя класса элементов, при копировании из которых нужно
    // Вставлять ссылку.
    addLink("my_text"); 

    </script>
</body>
</html>

Последний раз редактировалось moskitos80, 12.08.2013 в 04:04. Причина: Поправил код
Ответить с цитированием
  #9 (permalink)  
Старый 12.08.2013, 17:31
Аватар для inet_boy
Интересующийся
Отправить личное сообщение для inet_boy Посмотреть профиль Найти все сообщения от inet_boy
 
Регистрация: 31.10.2012
Сообщений: 24

спасибо вам добрый человек!
Ответить с цитированием
  #10 (permalink)  
Старый 13.08.2013, 00:55
Интересующийся
Посмотреть профиль Найти все сообщения от moskitos80
 
Регистрация: 11.08.2013
Сообщений: 28

рад был помочь
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Javascript фронтенд разработчик(долгосрочная, удаленная работа) cpp Работа 11 16.09.2012 12:04
Проблема с load в div и импортом стороннего кода с помощью javascript 1quick1 Events/DOM/Window 9 04.02.2011 13:16
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Работа с div из javascript newphp Общие вопросы Javascript 3 01.06.2010 17:11