Скрипт копирования ссылок
С помощью аякс вывожу список ссылок вот такого формата
<div class="bar"> <li>"//ссылка1",</li> <li>"//ссылка2",</li> <li>"//ссылка3",</li> </div>
Подскажите скрипт который сможет в один клик скопировать все ссылки и вставить в заданное поле textarea ну или хотя бы просто скопировать.
Пробовал несколько скриптов, но они не работают, поскольку ссылки выводятся через аякс
Мало данных, нужен пример структуры всех элементов.
Поскольку я JS и PHP знаю очень поверхностно, то в итоге полный код получился вот таким.
Стандартное подключение аякс скрипта
add_action( 'wp_ajax_link_action', 'link_load' ); add_action('wp_ajax_nopriv_link_action', 'link_load'); add_action( 'wp_enqueue_scripts', 'load_jscss' ); function load_jscss(){ wp_enqueue_script('link-script', get_template_directory_uri() . '/js/scrs.js', '', '', 'true'); global $post; wp_localize_script( 'link-script', 'linkurl', array( 'url' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce('ajax-defender'), 'postId' => $post->ID)); }Дальше функция которая выполняет парсинг
function link_load() { if( !wp_verify_nonce( $_POST['security'], 'ajax-defender' ) ){ wp_die('Ошибка безопасности!'); } $content = file_get_contents('ссылка на страницу'); // Определяем позицию строки, до которой нужно все отрезать $pos = strpos($content, '<div class="bar">'); //Отрезаем все, что идет до нужной нам позиции $content = substr($content, $pos); // Точно таким же образом находим позицию конечной строки $pos = strpos($content, '</div>'); $content = str_replace('<div class="bar">','</div>', $content); $content = str_replace(['"//', '",'], ['<li>"//', '",</li>'], $content); // выводим спарсенный текст. echo $content; wp_die(); }Также сам скрипт который срабатывает при клике и запускает функцию
jQuery(document).ready(function($){ $('h5').click(function(){ $.ajax({ type: "POST", url: linkurl.url, data: { security: linkurl.nonce, action: 'link_action', postId: linkurl.postId }, success: function(res){ var j = $("#archi-links"); j.html(res); }, error: function(){ alert('Error!'); } }); return false; }); });На выходе получаем при клике на тег h5 в блоке с id archi-links получаем список ссылок вот в таком формате
все ссылки я вывел в тегах li чтобы каждая была с новой строки. Теперь осталось добавить кнопку копировать все ссылки или содержимое ли. Возможно это нужно как-то по другому оформить, но в итоге на выходе нужно получить все сразу скопированные ссылки вот в таком виде без li
jQuery(function($){ $('h5').click(function(){ var $this = $(this); if($this.hasClass('blocked')) return false; $this.addClass('blocked'); $.ajax({ type: "POST", url: linkurl.url, data: { security: linkurl.nonce, action: 'link_action', postId: linkurl.postId }, success: function(res){ var j = $("#archi-links"); j.html(res); $this.removeClass('blocked'); }, error: function(){ alert('Error!'); } }); }); /* add content to textarea */ var $textarea = $('#custom_textarea'); var $button = $('#custom_button'); var ns = "\r\n"; $button.click(function(e){ e.preventDefault(); var textareaContent = ''; $("#archi-links li").each(function(){ textareaContent += $(this).text() + ns; }); $('#custom_textarea').val(textareaContent); }); });ну и ессно добавить сам элемент текстареа с указанным ID и кнопку по которой это все должно срабатывать тоже с нужным ID
Код не проверял, должен работать, но может где-то ошибся, это пример принципа.
Работает, спасибо за помощь.
Хотя в конце поля ставит еще пустую строку, словно ентер нажали
хотя если в ручную скопировать выводящий список, то такая же ситуация
$('#custom_textarea').val( $.trim(textareaContent) );вот теперь то что нужно, еще раз спасибо.
Еще хочу поинтересоваться, как сделать, чтобы кнопка копировать выводилась в самой функции, а не просто на странице
Ну примерно вот так:
осталось только сделать, чтобы аякс запрос ее определял
какой вы нудный до чертиков...
при чем тут айакс - это функция обработчик.
вы хотите на лету вставить элемент и навешать на него функцию обработчик?
Думаю да.
ну так и делайте это
определяете неизменную зону и навешиваете в ней jQuery delegate
Пробовал по разному, но вот такой вариант к примеру не работает
var $textarea = $('#custom_textarea'); var $button = $('#custom_button'); var ns = "\r\n"; $button.delegate( "click", function(e) { e.preventDefault(); var textareaContent = ''; $(".ozvucka li").each(function(){ textareaContent += $(this).text() + ns; }); //$('#custom_textarea').val(textareaContent); $('#custom_textarea').val($.trim(textareaContent)); });нифига вы не поняли, на поклон - в хорошем смысле, я добрый)))
Да я в принципе не особо много в этом понимаю, а объяснение навешиваете в ней jQuery delegate мне не говорит ничего. Ну загуглил, нашел пример с этим delegate применил как сумел.
смешно)))
Непонятно, что именно тебя так веселит, но в любом случаи спасибо помощь.
навешивание делегейта)))
бггг)))
$('тут селектор блока в котором будет ваш элемент, он неизменен и есть с самого начала загрузки страницы') .delegate('уточняющий селектор, т.е. тут может быть элемент который в последствии появится но с самого начала его нет', 'click', function(e){ // ну и тут все как обычно });