zclip:引用afterCopy回调中的sender元素
zclip: refer to sender element in afterCopy callback
我在一个页面上有多个"复制代码"按钮。每个代码都有自己的按钮。
这是我的基本html:
<a id="1" href="#" class="small-white-btn copyme">Copy Source</a>
<div id="code-1" style="display:none;">html source code goes here</div>
<div class="msg1"></div>
<a id="2" href="#" class="small-white-btn copyme">Copy Source</a>
<div id="code-2" style="display:none;">html source code goes here</div>
<div class="msg2"></div>
我的zclip jquery看起来像这样:
$('.copyme').zclip({
path: 'http://www.steamdev.com/zclip/js/ZeroClipboard.swf',
copy: function () {
var id = $(this).attr('id');
var copythis = $('#code-' + id).text();
return copythis;
},
afterCopy: function () {
$("div.msg" + id).html("<p>Source Code Copied</p>");
}
});
然而,这是可行的,我无法将消息注入div class="msg"
标记中。
如何将var id作为目标,将其添加到div msg中,并在单击按钮时将其显示在页面上。
无法从afterCopy
访问在copy
函数中创建的id
变量的原因是,函数内部定义的变量的作用域是该函数。然而,这很容易过度燃烧。
调用copy
函数时,不需要将$(this).attr('id')
中的值保存为全局变量,因为通过使用相同的精确表达式,您可以同样容易地获得afterCopy
函数中调用元素的id:即
afterCopy: function () {
var id = $(this).attr('id');
}
这回答了您最初的问题,但有一种更好的方法来确定要选择哪些元素。与其依赖ID
字段永远不会更改并使用它来构造另一个元素的id,您只需在.copyme
anchor
上以自定义数据-*attributes的形式存储复制文本和复制消息元素的确切id,如下所示:
<a data-copy="#code-1" data-copy-msg="#msg1" class="copyme">Copy Source 1</a>
然后,在copy
函数中,您可以获取该属性并将其传递到jQuery选择器中,以获得要复制的文本值,如下所示:
copy: function () {
var copySelector = $(this).data('copy');
return $(copySelector).text();
}
您可以用同样的方式处理afterCopy
事件。您可以使用this
,而不必将ID存储在内存中。抓住你想要消息的选择器,并将html应用于它,如下所示:
afterCopy: function () {
var copyMsgSelector = $(this).data('copy-msg');
$(copyMsgSelector).html("Source Code Copied");
}
Fiddle中的工作演示
所以整个事情看起来是这样的:
HTML:
<a data-copy="#code-1" data-copy-msg="#msg1"
href="#" class="copyme" >Copy Source 1</a>
<div id="code-1" style="display:none;">source code 1</div>
<span id="msg1"></span>
<br/>
<a data-copy="#code-2" data-copy-msg="#msg2"
href="#" class="copyme" >Copy Source 2</a>
<div id="code-2" style="display:none;">source code 2</div>
<span id="msg2"></span>
JavaScript:
$('.copyme').zclip({
path: 'http://www.steamdev.com/zclip/js/ZeroClipboard.swf',
copy: function () {
var copySelector = $(this).data('copy');
return $(copySelector).text();
},
afterCopy: function () {
var copyMsgSelector = $(this).data('copy-msg');
$(copyMsgSelector).html("Source Code Copied");
}
});
您在函数中声明var id,因此它是一个私有变量,在函数运行结束后会被销毁。您需要在函数之外声明变量;然后当它运行时,您可以分配并保留该值。
试试这个:
var id;
$('.copyme').zclip({
path: 'http://www.steamdev.com/zclip/js/ZeroClipboard.swf',
copy: function () {
id = $(this).attr('id');
var copythis = $('#code-' + id).text();
return copythis;
},
afterCopy: function () {
$("div.msg" + id).html("<p>Source Code Copied</p>");
}
});
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 谷歌地图获取点击事件中的sender元素
- zclip:引用afterCopy回调中的sender元素
- JavaScript:获取sender元素