Причина, по которой он прикрепляется только к одному элементу с идентификатором copytxt, заключается в том, что на странице может быть только один элемент с данным идентификатором. Идентификаторы должны быть уникальными.
Вероятно, он ничего не копирует в буфер обмена, потому что опция copy:
принимает функцию, которая возвращает: «любую строку, или любое выражение или функцию javascript, которая возвращает строку». Ваша функция возвращает объект jQuery, который не является строкой. Если вы хотите получить текст из элемента .prettyprint
(который вы не показали в своем примере HTML), то вам нужно получить текст из него следующим образом:
copy: function(){return jQuery(".codebox").find(".prettyprint").text();}
Если вы хотите, чтобы он работал более чем в одном месте, тогда используйте имена классов вместо идентификаторов и используйте селектор, который выберет все объекты с этим именем класса.
Если вы хотите, чтобы он извлекал текст, относящийся к ссылке, по которой щелкнули, вам потребуется изменить код извлечения текста, чтобы извлекать текст из объекта, относящегося к тому, по которому щелкнули.
Чтобы получить его относительно того, на что нажимали, и разрешить работу нескольким из них, вы можете изменить id="copytxt"
на class="copytxt"
и использовать такой код:
<script type="text/javascript">
$(document).ready(function(){
$(".copytxt").zclip({
path: "code/ZeroClipboard.swf",
copy: function() {
return jQuery(this).closest(".codebox").find(".prettyprint").text();
}
});
});
</script>
Добавление jQuery(this).closest(".codebox")
запускает поиск объекта .prettyprint
у ближайшего предка, у которого class = "codebox" до точки щелчка. Таким образом, он поднимется по дереву предков, откуда произошел щелчок, найдет родительский элемент codebox
, а затем найдет prettyprint
в этом кодовом поле.
Изменение на $(".copytxt").zclip
позволяет ему возвращать все объекты с class="copytxt"
, а не только один объект с id="copytxt"
.