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

时间:2018-11-05 20:25:12

标签: jquery wordpress jquery-clone

我在网络安装WordPress模板中有以下代码。我的目的是允许非技术用户(帮助博客经理保持其内容新鲜的内容经理,等等)通过博客查看所有角色“ custom-role”的用户,然后单击按钮将所有电子邮件地址复制到文本区域因此她可以将其复制并粘贴到“密件抄送”字段中,并与所有当前用户进行交流。

但是,该脚本仅克隆类“电子邮件”的第一个实例。我想念什么?这不应该抢占li.email的所有实例吗?

    <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>

2 个答案:

答案 0 :(得分:0)

来自jQuery docs on .html()

  

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

这就是为什么只得到第一个元素的原因。

如果只想将字符串中的所有电子邮件地址粘贴到电子邮件客户端中,也许您可​​以执行以下操作:

<body onload="mood()"> 
   <div id="t" style="display: block">HEYYYYY</div> 
</body>

这将使用var emailAddresses = $('.emails').map(function(i, element) { return $(element).text(); }).toArray().join(';'); $('#for-copy').text(emailAddresses); 类获取所有元素,使用.emails对其进行迭代以获取文本,将结果转换为数组,然后将其转换为以分号分隔的字符串通过.map()。在这种情况下,实际上无需克隆元素。

答案 1 :(得分:0)

我建议不要在这里使用.clone(),而只是抓住电子邮件地址。 clone方法确实最适合复制带有所有子元素的某些元素以在页面上重新创建它。我建议只是遍历“电子邮件”元素:

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