Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Работа JavaScript в определенном DIV (https://javascript.ru/forum/dom-window/40583-rabota-javascript-v-opredelennom-div.html)

inet_boy 11.08.2013 23:58

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

... вероятно там небольшое условие, но с моими зананиями JS это трудно
заранее спасибо всем откликнувшимся :thanks:

inet_boy 12.08.2013 00:39

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

moskitos80 12.08.2013 02:24

Приведите код скрипта, устанавливающего ссылку на источник.

inet_boy 12.08.2013 02:26

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;

moskitos80 12.08.2013 03:09

Боюсь, код вашего скрипта не кросс-браузерный, хотя может я ошибаюсь. Вот переделал ваш скрипт, теперь вы можете вызвать ф-цию 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>

inet_boy 12.08.2013 03:25

Огромное вам человеческое спасибо! :thanks:
сталкнулся со следующей проблемой, в div есть вложеный div с id новости, получается <div class="my_text"><div class="news_777"> ...
таким образом не отрабатывает скрипт так как в диве еще один див

inet_boy 12.08.2013 03:29

узнать class встроенного дива можно, поколупать дивгло и передавать его в скрипт, хотелось бы не размахивать блоки JS в каждой новости а просто подключать его строкой <script type="text/javascript" src=" ... в посте

moskitos80 12.08.2013 03:37

Держите :)

<!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>

inet_boy 12.08.2013 17:31

:thanks: спасибо вам добрый человек!

moskitos80 13.08.2013 00:55

рад был помочь :)


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