#javascript #jquery
#javascript #jquery
Вопрос:
Я пытаюсь установить кнопку для каждого текста td в таблице, которая будет копировать содержимое в ваш буфер обмена.
Я хочу выбрать содержимое узла каждого текста, используя ключевое слово this в jquery. Когда я передаю объект jQuery, он выдает ошибку.
Он работал, когда я передавал уникальный идентификатор, но когда я передавал объект jQuery, он не работал. Как я могу добиться этого эффективно?
$(document).ready( function() {
$('input[data-target]').on("click", function(){
var docSelector = document.createRange();
var get_text = $(this);
console.log(get_text);
console.log(docSelector.selectNodeContents(get_text));
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(docSelector);
document.execCommand("copy");
selection.removeAllRanges();
});
});
table, th, td{
border: 1px solid #000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<table>
<thead>
<tr>
<th>Copy</th>
<th>Text</th>
</tr>
<tr>
<td> <input type="button" data-target='copy' value="X"></td>
<td id='copy'> Copy some text </td>
</tr>
<tr>
<td> <input type="button" data-target='copy1' value="X"></td>
<td id='copy1'> Copy some more text </td>
</tr>
<tr>
<td> <input type="button" data-target='copy2' value="X"></td>
<td id='copy2'> Copy some even more text </td>
</tr>
</thead>
</table>
</html>
Комментарии:
1. можете ли вы попробовать это с помощью console.log(docSelector.selectNodeContents(get_text[0]));
2. Привет, спасибо за ответ! Я попробовал это и получил undefined. Сообщение об ошибке больше не отображается, но по-прежнему не работает
Ответ №1:
Вам нужно получить текст соседней ячейки:
var get_text = $(this).closest('td').next()[0];
Фрагмент:
$('input[data-target]').on("click", function(){
var docSelector = document.createRange();
var get_text = $(this).closest('td').next()[0];
console.log(get_text);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(docSelector);
document.execCommand("copy");
selection.removeAllRanges();
});
table, th, td{
border: 1px solid #000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<th>Copy</th>
<th>Text</th>
</tr>
<tr>
<td> <input type="button" data-target='copy' value="X"></td>
<td id='copy'> Copy some text </td>
</tr>
<tr>
<td> <input type="button" data-target='copy1' value="X"></td>
<td id='copy1'> Copy some more text </td>
</tr>
<tr>
<td> <input type="button" data-target='copy2' value="X"></td>
<td id='copy2'> Copy some even more text </td>
</tr>
</thead>
</table>
Комментарии:
1. Это работает! Спасибо, я предположил, что это само по себе позаботится об этом. Это хорошая идея на будущее! Приветствия
Ответ №2:
Использование data-target
идентификатора
https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
$(document).ready(function() {
$('input[data-target]').on("click", function() {
var docSelector = document.createRange();
var get_text = document.getElementById(this.dataset.target);
docSelector.selectNodeContents(get_text)
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(docSelector);
document.execCommand("copy");
selection.removeAllRanges();
});
});
table, th, td{
border: 1px solid #000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<table>
<thead>
<tr>
<th>Copy</th>
<th>Text</th>
</tr>
<tr>
<td> <input type="button" data-target='copy' value="X"></td>
<td id='copy'> Copy some text </td>
</tr>
<tr>
<td> <input type="button" data-target='copy1' value="X"></td>
<td id='copy1'> Copy some more text </td>
</tr>
<tr>
<td> <input type="button" data-target='copy2' value="X"></td>
<td id='copy2'> Copy some even more text </td>
</tr>
</thead>
</table>
</html>