Search code examples
javascripthtmlhtml-tableinnerhtml

Populate table TD by ID when "select" changes in dropdown


My task is to create a dynamic table which will be used to compare the services of different brokers againt each other in a table. Given by the websites size and clients requirements I need to be able to change to content of the table td's when the user makes a selection from the dropdown menu in the thanle header.

I've updated the code bellow with the latest version that I've put together till now.

The tasks I need help with are:

  • Script only listens to col2
  • How can I add an image to the array blogo?
  • Have one item from the dropdown loaded by default per column eq Broker 1, Broker 2, Broker 3

Table

<html>
<head>
<title>Comparison Chart Test</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
</head>
<body>
<table class="zebra" size="100%" border="1">
<thead>
<tr>
    <th class="center">Broker Vergleichsliste</th>
    <th>
        <select class="col2 selectBroker">
            <option>Broker 1</option>
            <option>Broker 2</option>
            <option>Broker 3</option>
            <option>Broker 4</option>
            <option>Broker 5</option>
        </select>
    </th>
    <th>
        <select class="col3 selectBroker">
            <option>Broker 1</option>
            <option>Broker 2</option>
            <option>Broker 3</option>
            <option>Broker 4</option>
            <option>Broker 5</option>
        </select>
    </th>
    <th>
        <select class="col4 selectBroker">
            <option>Broker 1</option>
            <option>Broker 2</option>
            <option>Broker 3</option>
            <option>Broker 4</option>
            <option>Broker 5</option>>
        </select>
    </th>
 </tr>
</thead>
<tbody>
<tr>
    <td><strong>Broker</strong></td>
    <td class="col2 blogo"></td>
    <td class="col3 blogo"></td>
    <td class="col4 blogo"></td>
</tr>
<tr>
    <td><strong>Reguliert</strong></td>
    <td class="col2 regulated"></td>
    <td class="col3 regulated"></td>
    <td class="col4 regulated"></td>
</tr>
<tr>
    <td><strong>securityicherheit</strong></td>
    <td class="col2 security"></td>
    <td class="col3 security"></td>
    <td class="col4 security"></td>
</tr>
  <tr>
    <td><strong>Verrechnungskonto</strong></td>
    <td class="col2 account"></td>
    <td class="col3 account"></td>
    <td class="col4 account"></td>
  </tr>
  <tr>
    <td><strong>Mindesteinlage</strong></td>
    <td class="col2 deposit"></td>
    <td class="col3 deposit"></td>
    <td class="col4 deposit"></td>
  </tr>
  <tr>
    <td><strong>Software</strong></td>
    <td class="col2 software"></td>
    <td class="col3 software"></td>
    <td class="col4 software"></td>
  </tr>
  <tr>
    <td><strong>Handelseinheit</strong></td>
    <td class="col2 einheit"></td>
    <td class="col3 einheit"></td>
    <td class="col4 einheit"></td>
  </tr>
  <tr>
    <td><strong>Margin Forex</strong></td>
    <td class="col2 margin"></td>
    <td class="col3 margin"></td>
    <td class="col4 margin"></td>
  </tr>
  <tr>
    <td><strong>Kommission pro Halfturn</strong></td>
    <td class="col2 comission"></td>
    <td class="col3 comission"></td>
    <td class="col4 comission"></td>
  </tr>
  <tr>
    <td><strong>Spreads</strong></td>
    <td class="col2 spread"></td>
    <td class="col3 spread"></td>
    <td class="col4 spread"></td>
  </tr>
  <tr>
    <td><strong>Finanzierungskosten</strong></td>
    <td class="col2 fcost"></td>
    <td class="col3 fcost"></td>
    <td class="col4 fcost"></td>
  </tr>
  <tr>
    <td><strong>Orderarten</strong></td>
    <td class="col2 orders"></td>
    <td class="col3 orders"></td>
    <td class="col4 orders"></td>
  </tr>
  <tr>
    <td><strong>Telefonhandel</strong></td>
    <td class="col2 phone"></td>
    <td class="col3 phone"></td>
    <td class="col4 phone"></td>
  </tr>
  <tr>
    <td><strong>Mobile Trading</strong></td>
    <td class="col2 mobile"></td>
    <td class="col3 mobile"></td>
    <td class="col4 mobile"></td>
  </tr>
  <tr>
    <td><strong>Produktpalette</strong></td>
    <td class="col2 products"></td>
    <td class="col3 products"></td>
    <td class="col4 products"></td>
  </tr>
  <tr>
    <td><strong>Besonderheiten</strong></td>
    <td class="col2 special"></td>
    <td class="col3 special"></td>
    <td class="col4 special"></td>
  </tr>
  <tr>
    <td><strong>ECN / MM / STP / DMA</strong></td>
    <td class="col2 art"></td>
    <td class="col3 art"></td>
    <td class="col4 art"></td>
  </tr>
  <tr>
    <td><strong>Fazit</strong></td>
    <td class="col2 fazit"></td>
    <td class="col3 fazit"></td>
    <td class="col4 fazit"></td>
  </tr>
  <tr>
    <td><strong>Zur Webseite</strong></td>
    <td class="center"><a href="/goto/forex/" target="_blank" class="button-more">Konto eröffnen</a></td>
    <td class="center"><a href="#" target="_blank" class="button-more">Konto eröffnen</a></td>
    <td class="center"><a href="#" target="_blank" class="button-more">Konto eröffnen</a></td>
  </tr>
  </tbody>
</table>
</body>

JS

<script language="JavaScript">
var data = {
"brokers":
    {
    "broker": [
        {
        "name": "Broker 1",
        "blogo": "Broker1 Logo",
        "regulated": "YES",
        "security": "Mindep",
        "account": "Konto",
        "deposit": "Einlage",
        "software": "Software",
        "einheit": "H Einheit",
        "margin": "100:1",
        "comission": "Komission",
        "spread": "Spreads",
        "fcost": "F Kosten",
        "orders": "Orderarten",
        "phone": "YES/No",
        "mobile": "Yes/No",
        "products": "Products",
        "special": "Besonderheiten",
        "art": "MM/DMA",
        "fazit": "Fazit"
        },
    {
        "name": "Broker 2",
        "blogo": "Broker2 Logo",
        "regulated": "NO",
        "security": "Mindep",
        "account": "Konto",
        "deposit": "Einlage",
        "software": "Software",
        "einheit": "H Einheit",
        "margin": "200:1",
        "comission": "Komission",
        "spread": "Spreads",
        "fcost": "F Kosten",
        "orders": "Orderarten",
        "phone": "YES",
        "mobile": "Yes/No",
        "products": "Products",
        "special": "Besonderheiten",
        "art": "DMA/STP",
        "fazit": "Fazit"
        },
    {
        "name": "Broker 3",
        "blogo": "Broker3 Logo",
        "regulated": "YES",
        "security": "Mindep",
        "account": "Konto",
        "deposit": "Einlage",
        "software": "Software",
        "einheit": "H Einheit",
        "margin": "Forex margin",
        "comission": "Komission",
        "spread": "Spreads",
        "fcost": "F Kosten",
        "orders": "Orderarten",
        "phone": "NO",
        "mobile": "Yes/No",
        "products": "Products",
        "special": "Besonderheiten",
        "art": "ECN/MM/DMA",
        "fazit": "Fazit"
        },
    {
        "name": "Broker 4",
        "blogo": "Broker4 Logo",
        "regulated": "NO",
        "security": "Mindep",
        "account": "Konto",
        "deposit": "Einlage",
        "software": "Software",
        "einheit": "H Einheit",
        "margin": "Forex margin",
        "comission": "Komission",
        "spread": "Spreads",
        "fcost": "F Kosten",
        "orders": "Orderarten",
        "phone": "Green Tick",
        "mobile": "Yes/No",
        "products": "Products",
        "special": "Besonderheiten",
        "art": "MM/DMA",
        "fazit": "Fazit"
        },
    {
        "name": "Broker 5",
        "blogo": "Broker5 Logo",
        "regulated": "YES",
        "security": "Mindep",
        "account": "Konto",
        "deposit": "Einlage",
        "software": "Software",
        "einheit": "H Einheit",
        "margin": "Forex margin",
        "comission": "Komission",
        "spread": "Spreads",
        "fcost": "F Kosten",
        "mobile": "Yes/No",
        "products": "Products",
        "special": "Besonderheiten",
        "art": "ECN/STP",
        "fazit": "Fazit"
        }
    ]}
}

$(".selectBroker").change(function() {
var jthis = $(this);
var whichCol;
if (jthis.hasClass("col2")) {
    whichCol = "col2";
}
$.each(data.brokers.broker, function(i, v) {
    if (v.name == jthis.val()) {
        $("td." + whichCol + ".name").html(v.name);
        $("td." + whichCol + ".blogo").html(v.blogo);
        $("td." + whichCol + ".regulated").html(v.regulated);
        $("td." + whichCol + ".security").html(v.security);
        $("td." + whichCol + ".account").html(v.account);
        $("td." + whichCol + ".deposit").html(v.deposit);
        $("td." + whichCol + ".software").html(v.software);
        $("td." + whichCol + ".einheit").html(v.einheit);
        $("td." + whichCol + ".margin").html(v.margin);
        $("td." + whichCol + ".comission").html(v.comission);
        $("td." + whichCol + ".spread").html(v.spread);
        $("td." + whichCol + ".fcost").html(v.fcost);
        $("td." + whichCol + ".orders").html(v.orders);
        $("td." + whichCol + ".phone").html(v.phone);
        $("td." + whichCol + ".mobile").html(v.mobile);
        $("td." + whichCol + ".products").html(v.products);
        $("td." + whichCol + ".special").html(v.special);
        $("td." + whichCol + ".art").html(v.art);
        $("td." + whichCol + ".fazit").html(v.fazit);
        return;
    }
});

});
</script>
</html>

Solution

  • See this jsfiddle. You'll need to expand it of course to finish the code. There are probably better ways to do this but it works and it was something I banged out in a few minutes.

    HTML

    <table class="table table-bordered table-striped">
        <tr>
            <th>
                <select class="col1 selectBroker">
                    <option>Broker 1</option>
                    <option>Broker 2</option>
                    <option>Broker 3</option>
                </select>
            </th>
            <th>
                <select class="col2 selectBroker">
                    <option>Broker 1</option>
                    <option>Broker 2</option>
                    <option>Broker 3</option>
                </select>
            </th>
            <th>
                <select class="col3 selectBroker">
                    <option>Broker 1</option>
                    <option>Broker 2</option>
                    <option>Broker 3</option>
                </select>
            </th>
        </tr>
        <tr>
            <td class="col1 isTotallyAwesome"></td>
            <td class="col2 isTotallyAwesome"></td>
            <td class="col3 isTotallyAwesome"></td>
        </tr>
        <tr>
            <td class="col1 foo"></td>
            <td class="col2 foo"></td>
            <td class="col3 foo"></td>
        </tr>
    </table>
    

    JS

    var data = {
        "brokers":
            {
            "broker": [
                {
                "name": "Broker 1",
                "isTotallyAwesome": "yes",
                "foo": "no"},
            {
                "name": "Broker 2",
                "isTotallyAwesome": "no",
                "foo": "yes"},
            {
                "name": "Broker 3",
                "isTotallyAwesome": "true",
                "foo": "no"}
            ]}
    }
    
    $(".selectBroker").change(function() {
        var jthis = $(this);
        var whichCol;
        if (jthis.hasClass("col1")) {
            whichCol = "col1";
        }
        $.each(data.brokers.broker, function(i, v) {
            if (v.name == jthis.val()) {
                $("td." + whichCol + ".isTotallyAwesome").html(v.isTotallyAwesome);
                $("td." + whichCol + ".foo").html(v.foo);
                return;
            }
        });
    
    });