jQuery.clone()只获取类的第一个实例



我在网络安装WordPress模板中有以下代码。我的意图是允许非技术用户(帮助博客经理保持内容新鲜等的内容经理(通过博客查看角色"自定义角色"的所有用户,然后单击按钮将所有电子邮件地址复制到文本区域,这样她就可以将其复制并粘贴到bcc字段中,并与所有当前用户通信。

然而,该脚本只是克隆类"电子邮件"的第一个实例。我错过了什么?这不应该抓取li.emails的所有实例吗?

<button id="copy">Copy all emails</button>
<textarea id="for-copy"></textarea>
<?php
$bcount = get_blog_count();
global $wpdb;
$blogs = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE 
spam = '0' AND deleted = '0' and archived = '0' and public='1'"));
if(!empty($blogs)){
foreach($blogs as $blog){
$details = get_blog_details($blog->blog_id);
if($details != false){
$addr = $details->siteurl;
$name = $details->blogname;
$id = $details->blog_id;
$blogusers = get_users( 'blog_id='.$id.'&role=custom-role' );
if (!empty($blogusers)) {
echo '<a href="'.$addr.'">'.$name.'</a>'.'<ul>';
foreach ( $blogusers as $user ) {
echo '<li class="emails">'.$user->user_email .'</li>';
}
echo '</ul>';
}
}
}
}
?>
<script>
(function($) {
$('#copy').click(function(e){
var new_list = $(".emails").clone();
$('#for-copy').append(new_list.html()); // also tried val()
});
})( jQuery );
</script>

来自.html():上的jQuery文档

获取匹配元素集中第一个元素的HTML内容,或设置每个匹配元素的HTML属性。

所以这就是为什么你只得到第一个元素。

如果你只想把所有的电子邮件地址都放在一个字符串中粘贴到电子邮件客户端,也许你可以做这样的事情:

var emailAddresses = $('.emails').map(function(i, element) {
return $(element).text();
}).toArray().join(';');
$('#for-copy').text(emailAddresses);

这将使用.emails类获取所有元素,使用.map()对它们进行迭代以获取文本,将结果转换为数组,然后通过.join()将其转换为分号分隔的字符串。在这种情况下,实际上不需要克隆元素。

我建议不要在这里使用.clone((,而只是获取电子邮件地址。clone方法确实最适合复制某个元素及其所有子元素,以便在页面上重新创建它。我建议重复"电子邮件"元素:

var forcopy = $('#for-copy')
$('.emails').each(function() {
forcopy.append($(this).text())
}

相关内容

最新更新