参考:Loading gravatar using jquery
我使用上面的方法在页面上生成gravatar但是我在页面上有多个电子邮件,代码只生成一个MD5,因此我的JS只有一个gravatar:
var email = $('#email').val();
var digestString = Crypto.MD5(email);
$('#md5').val(digestString);
var gravatar = $('<img>').attr({src: 'http://www.gravatar.com/avatar/' + digestString});
$('.gravatar').append(gravatar);
我正在使用Crypto MD5 http://code.google.com/p/crypto-js/,并且会在标题中加载电子邮件隐藏在输入中:
<input type="hidden" id="email" value="<?php echo $message['contact_email'];?>">
这些正在为每个用户打印出来。
任何帮助都会很棒
编辑*****
HTML OUTPUT工作:
<div class="message-author">
<span class="gravatar" style="height: 24px;">
<img src="http://www.gravatar.com/avatar/82c9a9c254f35a912d8fefc248c30fd8"></span>
<input type="hidden" id="md5" value="82c9a9c254f35a912d8fefc248c30fd8">
<input type="hidden" class="email" value="themailname@thecompany.com">
</div>
HTML OUTPUT无效:
<div class="message-author">
<span class="gravatar" style="height: 24px;">
<img src="http://www.gravatar.com/avatar/82c9a9c254f35a912d8fefc248c30fd8"></span>
<input type="hidden" id="md5" value="">
<input type="hidden" class="email" value="themailname@thecompany.com">
</div>
PHP
<?php foreach ($messages['page'] as $message): ?>
<li class="message">
<div class="message-body"><?php echo $message['message']; ?></div>
<div class="message-author">
<span class="gravatar" style="height: 24px;"></span>
<input type="hidden" class="md5" value="">
<input type="hidden" class="email" value="<?php echo $message['contact_email'];?>">
<?php echo $message['contact_person'];?> -
<?php echo date("m M - g:i a", $message['created']); ?>
</div>
</li>
<?php endforeach; ?>
答案 0 :(得分:1)
尝试以下方法:
$('input.email').each(function () {
var self = $(this);
var md5 = Crypto.MD5(this.value);
self.siblings('.md5').val(md5);
self.siblings('.gravatar').append($('<img />').prop('src', 'http://www.gravatar.com/avatar/' + md5));
});
您需要引入一个循环(通过each()
)来分别查询每个email
元素;否则,正如您所知,只有第一个被查看(因为 getters ,例如val()
只会返回第一个匹配元素的值。
然而,正如我在in my comment暗示的那样,这应该真的是PHP的工作;这也是一个潜在的隐私问题,用HTML格式向用户发送电子邮件。