我有一张桌子,有两个字段,一个是"名字"并且HTML类是" name",另一个是" Email"使用HTML类:" mail"。
<table>
<tr>
<td colspan="2">User Email</td>
</tr>
<tr>
<td class="name">Albert Einstein</td>
<td class="mail"></td>
</tr>
</table>
所以我想说我有一个这样的邮件列表:
我想要的是根据名称字段设置邮件字段的值。
这个从@Ganesan San共享的Javascript代码,似乎几乎可以完成这项工作:
var emails = ["albert@company.com", "inewton@company.com", "anewton@company.com"];
var name_elements = document.querySelectorAll("td.name");
var mail_element = document.querySelectorAll("td.mail");
for (i = 0; i < name_elements.length; i++) {
var current_element = name_elements[i];
var name = current_element.textContent;
for (j = 0; j < emails.length; j++) {
if (emails[j].indexOf(name) != -1) {
mail_element[i].textContent = emails[j];
break;
}
}
}
但它不能与大写字母或名称中的空格一起使用,那么我们如何修复此代码以使其与大写字母和名字和姓氏之间的空格一起使用?还要检测哪个电子邮件属于具有类似电子邮件的人员,请参阅示例:
感谢@Alexander Higgins和@Tushar Vaghela。这两个答案都很有效。
答案 0 :(得分:1)
要处理大写,您可以使用.toLowerCase()
然后你需要将你的名字分成几部分并尝试找到电子邮件的匹配。
您可以使用split(' ')
使用分隔符空格将字符串分解为单词数组。
从这里你可以得到名字和姓氏。
您可以使用名字的第一个字符并将其与最后一个字符组合,以查看First Initial + LastName +'@'+ Domain形式的地址。
如果失败,并且您只想通过名字检查组合名字+'@'+域。
在旁注中,在原始代码中,您不需要遍历所有元素,在每次迭代中检查.indexOf
。如下所示,您只能在循环中检查.indexOf
一次。
<table>
<tr>
<td colspan="2">User Email</td>
</tr>
<tr>
<td class="name">Albert Einstein</td>
<td class="mail"></td>
</tr>
<tr>
<td class="name">Isaac Newton</td>
<td class="mail"></td>
</tr>
<tr>
<td class="name">Alice Newton</td>
<td class="mail"></td>
</tr>
</table>
<script>
var emails = ["albert@company.com", "inewton@company.com", "anewton@company.com"];
var name_elements = document.querySelectorAll("td.name");
var mail_element = document.querySelectorAll("td.mail");
for (i = 0; i < name_elements.length; i++) {
var current_element = name_elements[i];
var name = current_element.textContent.toLowerCase();
var nameParts= name.split(' ');
var fName= nameParts[0];
var fInitial= name[0];
var lastName= name.split(' ')[1];
var possibleFormats = [
fInitial + lastName + '@company.com',
fName + lastName + '@company.com',
fName + '.' + lastName + '@company.com',
fName + '@company.com',
]
var idx=-1;
for(var k=0; idx<0 && k<possibleFormats.length; k++)
{
idx= emails.indexOf(possibleFormats[k]);
console.log(idx);
}
if (idx>-1)
{
mail_element[idx].textContent = emails[idx]
} else {
console.log('Failed: ' + emailToFind);
}
}
</script>
答案 1 :(得分:0)
希望这有帮助
var names = document.getElementsByClassName('name');
var mails = document.getElementsByClassName('mail');
for (var i = 0; i < names.length; i++) {
var namelist = (names[i].innerText).toLowerCase().split(" ");
var fname = namelist[0].substring(0, 1);
var lname = namelist[namelist.length - 1];
mails[i].innerHTML = fname + lname + '@company.com';
}
table {
padding: 10px;
}
<table border="1">
<tr>
<td>User</td>
<td>Email</td>
</tr>
<tr>
<td class="name">Albert Einstein</td>
<td class="mail"></td>
</tr>
<tr>
<td class="name">Isaac Newton</td>
<td class="mail"></td>
</tr>
<tr>
<td class="name">Alice Newton</td>
<td class="mail"></td>
</tr>
<tr>
<td class="name">Alice MiddleName Newton</td>
<td class="mail"></td>
</tr>
</table>