2017-07-19 2 views
0

Ich habe eine Tabelle, mit 2 Feldern, ist eins "Name" und die HTML-Klasse ist "Name", die andere ist "Email" mit HTML-Klasse: "Mail".Set Mail-Wert nach Name Wert

<table> 
    <tr> 
     <td colspan="2">User Email</td> 
    </tr> 
    <tr> 
     <td class="name">Albert Einstein</td> 
     <td class="mail"></td> 
    </tr> 
</table> 

können also sagen, dass ich eine Mail-Liste wie folgt aussehen:

Was ich will, ist der Wert der Mail-Feld zu setzen, nach dem Namensfeld.

Dieser von @Ganesan San Gemeinsamen Javascript-Code, scheint die Arbeit fast tun:

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

Aber es ist nicht mit Großbuchstaben oder Leerzeichen in Namen nicht funktioniert, so wie können wir diesen Code zu beheben, damit es funktioniert mit Großbuchstaben und Leerzeichen zwischen Vor- und Nachname? auch zu erkennen, welche E-Mail an Personen mit ähnlicher E-Mail gehört, siehe Beispiel:

  1. Name: Isaac Newton, Mail: "[email protected]"
  2. Name: Alice Newton, Mail: „anewton @ Unternehmen. com "

Dank @Alexander Higgins und @Tushar Vaghela. Beide Antworten funktionieren großartig.

+0

Was ist das Format der E-Mail? Vollständiger Name ? Inital + voller Name? Was, wenn ich 'Einstein' betrete? – Weedoze

+0

@Weedoze siehe Code: var emails = ["[email protected]", "[email protected]", "[email protected]"]; Inital + Nachname, aber es kann variieren, Auch das Namensformat wird immer das gleiche sein, Vorname und Nachname – RocketFuel

+0

'albert @ company.com' ist nicht initial + Nachname ... Wie kann es variieren? – Weedoze

Antwort

1

mit Kapitalisierung umgehen, können Sie die Zeichenfolge in Kleinbuchstaben mit .toLowerCase()

Dann wandeln Sie Sie Namen brechen müssen in Teile und versuchen, eine Übereinstimmung für die E-Mail zu finden.

Sie können split(' ') verwenden, um eine Zeichenfolge in ein Array von Wörtern unter Verwendung eines Leerzeichens für das Trennzeichen zu zerlegen.

Von hier können Sie den Vor- und Nachnamen bekommen.

Sie können das erste Zeichen des Vornamens nehmen und dieses mit dem letzten kombinieren, um nach Adressen in der Form Erste Initiale + Nachname + '@' + Domäne zu suchen.

Wenn dies fehlschlägt, und Sie möchten nur den Vornamen des Kombinats Vorname + '@' + Domain überprüfen.

Nebenbei bemerkt, in Ihrem ursprünglichen Code müssen Sie nicht alle Elemente in Schleife durchlaufen .indexOf in jeder Iteration. Wie unten gezeigt, können Sie .indexOf nur einmal in der Schleife überprüfen.

<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

Danke, Dieser Code funktioniert! – RocketFuel

+0

Nur Code Erläuterungen hinzugefügt. –

+0

Danke, nur noch eine letzte Frage, was passiert, wenn email [email protected] ist? – RocketFuel

0

Hoffnung hilft diese

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

Danke für die Hilfe, Markieren Sie bereits die erste Antwort als Antwort. aber das Hinzufügen dieser Antwort als eine Erwähnung im ursprünglichen Beitrag, so kann es als Alternative zum ersten – RocketFuel

+0

No Problem zählen, das ist generische Lösung, wo Sie einen beliebigen Namen eingeben können und es wird Kombination von Vor- und Nachnamen verwenden, auch wenn zweiter Vorname ist erwähnt. Sie können es aufladen, wenn Sie das nützlich finden. :) –

+0

Cant Up Abstimmung jetzt, mein Ruf ist Level 10, brauche 15, aber ich werde, wenn ich 15 – RocketFuel