2017-07-19 7 views
0

2つのフィールドを持つテーブルがあります.1つは「名前」、HTMLクラスは「名前」、もう1つはHTMLクラス「メール」の「メール」です。名前の値に応じてメールの値を設定します。

<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

に役立つ電子メールの形式は何ですか?フルネーム ?インタルタール+フルネーム?もし私が「アインシュタイン」に入ったら? – Weedoze

+0

@Weedozeコードを参照してください:var emails = ["[email protected]"、 "[email protected]"、 "[email protected]"];インティタール+姓は変わりますが、名前の形式も常に同じです姓と名: – RocketFuel

+0

'albert @ company.com'はイニシャル+ラストネームではありません...どのように変えることができますか? – Weedoze

答えて

1

、あなたは次にあなたがアップパーツにあなたの名前を破ると、電子メールの一致を見つけようとする必要が.toLowerCase()

を使用して小文字にあなたの文字列を変換することができます。

split(' ')を使用すると、区切り文字のスペースを使用して文字列を単語の配列に分割できます。

ここから姓と名を得ることができます。

ファーストネーム+ファーストネーム+ '@' +ドメインの形式で、ファーストネームの最初の文字を取り、最後の文字と組み合わせてアドレスを確認することができます。

これが失敗した場合、ファーストネーム+ '@' +ドメインを結合するだけでファーストネームで確認したい場合。

元のコードでは、各繰り返しですべての要素チェックを.indexOfにループする必要はありません。以下に示すように、ループ内で.indexOfを1回だけチェックすることができます。

<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

関連する問題