2016-05-02 5 views
1

Ich bin ein Anfänger in jQuery, und versucht, so etwas wie dies mit „find“ zu erhalten:JQuery finden und geben ein Wörterbuch

Eingang:

<td> 
<a href="person.asp?id=100>Bryan Adams</a> (Singer) 
<a href="person.asp?id=100>Bryan Adams</a> (Composer) 
<a href="person.asp?id=101>Toto</a> (Group) 
</td> 
<td> 
<a href="person.asp?id=10004>Celine Dion</a> (Singer) 
<a href="person.asp?id=10005>John Travolta</a> (Actor) 
</td> 
<td> 
<a href="person.asp?id=10004>Celine Dion</a> (Composer) 
<a href="person.asp?id=10005>John Travolta</a> (Director) 
</td> 
<td> 
... and so on 
</td> 

Ausgang wird ein Wörterbuch der Name sein (key) und Berufe - hängten Komma (Wert)

[Bryan Adams] [Singer,Composer] 
[Toto]   [Group] 
[Celine Dion] [Singer,Composer] 
[John Travolta] [Actor,Director] 

Vielen Dank im Voraus

+0

Wenn Sie „sagen put ", ist es eine HTML-Zeichenfolge oder tatsächliche DOM-Elemente? Und so willst du die Ausgabe: '{" Toto ": [" Gruppe "]," Celine Dion ": [" Sänger "," Komponist "], ...}'? – blex

+0

Psst JavaScript hat keine Wörterbücher. Es hat Arrays. – evolutionxbox

+0

@evolutionxbox Pssst jedes JavaScript-Objekt ist ein Wörterbuch – Ragnagord

Antwort

0

Man könnte es auf diese Weise tun, mit einem wenig Regex Objekt hinzufügen die Rolle aus der Klammer zu extrahieren:

var result = {}; 
 

 
$('a[href^="person.asp"]').each(function(){ 
 
    var name = $(this).text(), 
 
     role = this.nextSibling.textContent.match(/\(([A-Za-z\s]*)\)/); 
 

 
    // If the name is not in the result Object 
 
    if(!result.hasOwnProperty(name)) { result[name] = []; } 
 
    // If the role is defined and not in the roles' array already 
 
    if(typeof role !== "undefined" && role[1].length && result[name].indexOf(role[1]) < 0) { 
 
    result[name].push(role[1]); 
 
    } 
 
}); 
 

 
document.body.innerHTML = "<pre>" + JSON.stringify(result, 0, 4) + "</pre>";
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<table> 
 
    <tr> 
 
     <td> 
 
      <a href="person.asp?id=100">Bryan Adams</a> (Singer) 
 
      <a href="person.asp?id=100">Bryan Adams</a> (Composer) 
 
      <a href="person.asp?id=101">Toto</a> (Group) 
 
     </td> 
 
     <td> 
 
      <a href="person.asp?id=10004">Celine Dion</a> (Singer) 
 
      <a href="person.asp?id=10005">John Travolta</a> (Actor) 
 
     </td> 
 
     <td> 
 
      <a href="person.asp?id=10004">Celine Dion</a> (Composer) 
 
      <a href="person.asp?id=10005">John Travolta</a> (Director) 
 
     </td> 
 
    </tr> 
 
</table>

0

können Sie 012 verwendenfür td 's und a' s Elemente und

var obj = {}; 
 
$('td').each(function() { 
 
    $(this).find('a').each(function() { 
 
    var name = $(this).text(); 
 
    var value = this.nextSibling.nodeValue; 
 
    obj[name] = (obj[name] || []).concat(value.trim()); 
 
    }) 
 
}) 
 

 
document.body.innerHTML = "<pre>" + JSON.stringify(obj, 0, 1) + "</pre>";
table { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td> 
 
     <a href="person.asp?id=100">Bryan Adams</a> (Singer) 
 
     <a href=" person.asp?id=100">Bryan Adams</a> (Composer) 
 
     <a href="person.asp?id=101">Toto</a> (Group) 
 
    </td> 
 
    <td> 
 
     <a href=" person.asp?id=10004">Celine Dion</a> (Singer) 
 
     <a href="person.asp?id=10005">John Travolta</a> (Actor) 
 
    </td> 
 
    <td> 
 
     <a href=" person.asp?id=10004">Celine Dion</a> (Composer) 
 
     <a href="person.asp?id=10005">John Travolta</a> (Director) 
 
    </td> 
 
    </tr> 
 
</table>

Verwandte Themen