2017-07-19 28 views
0

我有一個表,其中有兩個字段,一個是「Name」,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 = ["[email protected]", "[email protected]", "[email protected]"]; 
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; 
     } 
    } 
} 

不過,這並不以大寫字母或空格名稱中工作,那麼如何才能解決這個問題的代碼,使其工作大寫字母和空格之間的名字和姓氏?還檢測到的電子郵件屬於類似電子郵件的人,見例如:

  1. 名稱:艾薩克·牛頓,郵件:「[email protected]
  2. 名稱:愛麗絲牛頓,郵件:「anewton @公司。 com「

感謝@Alexander Higgins@Tushar Vaghela。兩個答案都很好。

+0

什麼是電子郵件的格式?全名 ? Intital +全名?如果我輸入「愛因斯坦」怎麼辦? – Weedoze

+0

@Weedoze查看代碼:var emails = [「[email protected]」,「[email protected]」,「[email protected]」]; Intital +姓氏,但它可以變化,也名稱格式將始終相同,名字和姓氏 – RocketFuel

+0

'albert @ company.com'不是初始名+姓...它如何變化? – Weedoze

回答

1

爲了應對資本,您可以將您的字符串中使用.toLowerCase()

然後,你需要向上突破你的名字成零件,並設法找到的電子郵件匹配小寫。

您可以使用split(' ')將字符串拆分爲一個使用分隔符空格的單詞數組。

從這裏你可以得到名字和姓氏。

您可以取第一個名字的第一個字符,並將其與最後一個字符組合,以First First + LastName +'@'+ Domain的形式檢查地址。

如果失敗,並且您希望僅通過名字查找組合First Name +'@'+ 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 = ["[email protected]", "[email protected]", "[email protected]"]; 
 
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>

+0

謝謝,此代碼有效! – RocketFuel

+0

只需添加代碼說明。 –

+0

謝謝,最後一個問題,如果電子郵件是[email protected],會發生什麼情況? – RocketFuel

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>

+0

感謝您的幫助,已經將第一個答覆標記爲答案。但在原始文章中增加了這個答案,所以它可以作爲第一個 – RocketFuel

+0

沒有問題的替代方案,這是一種通用的解決方案,您可以輸入任何名稱,並且它將使用姓和名的組合,即使中間名是提及。如果你覺得這很有用,你可以放棄它。 :) –

+0

現在不能投票,我的聲望是10級,需要15.但我會當我達到15 – RocketFuel