Warface
Warface

Reputation: 5119

Make a query from jquery data attr values

I can get the results fine but each data-value results are comma seperated because it's an array. I would like to make the query without any commas and maybe remove the last AND.

Is that possible ?

jQuery

//Submit Adv Search
    $('#submitAdvSearch').click(function(){
        var query = "SELECT * FROM table WHERE ";
        var yo = $('.subCat span[data-value].checked').map(function(){
            return $(this).attr('data-value')+'=1 AND ';
        }).get();

        console.log(query+' '+yo);
    });

HTML

<div class="cat">
    <div class="catTitle">
        <h2>Performance</h2>
        <span class="arrow"></span>
        <br class="clear"/>
    </div>
    <div class="subCat" data-cat="performance">
        <div>

                <span data-all="all">&#9675;&nbsp;Tous</span><br>
            <div class="after">
                <span data-value="30000_doublefrotements" class="checked">&#9675;&nbsp;+30,000 double frottement</span><br>
                <span data-value="atcc96_lavablecommercial">&#9675;&nbsp;ATTCC 96</span><br>
                <span data-value="nfpa701_inifuge">&#9675;&nbsp;NFPA 701</span><br>
                <span data-value="resistanrayonsuv">&#9675;&nbsp;Uv résistant</span>
            </div>
        </div>
    </div>
</div>

<div class="cat">
    <div class="catTitle">
        <h2>Style</h2>
        <span class="arrow"></span>
        <br class="clear"/>
    </div>
    <div class="subCat" data-cat="style">
        <div>

                <span data-all="all">&#9675;&nbsp;Tous</span><br>
            <div class="after">
                <span data-value="contemporain" class="checked">&#9675;&nbsp;Contemporain</span><br>
                <span data-value="traditionnel">&#9675;&nbsp;Traditionel</span><br>
                <span data-value="transitionnel" class="checked">&#9675;&nbsp;Transitionel</span>
            </div>
        </div>
    </div>
</div>
<div id="submitAdvSearch">Submit</div>

Result

SELECT * FROM table WHERE  30000_doublefrotements=1 AND ,contemporain=1 AND ,transitionnel=1 AND 

Upvotes: 1

Views: 156

Answers (3)

chelmerich
chelmerich

Reputation: 193

This worked for me:

//Submit Adv Search
$('#submitAdvSearch').click(function(){
    var query = "SELECT * FROM table WHERE ";
    var where_clause = [];
    var yo = $('.subCat span[data-value].checked').map(function(){
        var item = $(this).attr('data-value')+'=1';
        where_clause.push(item);           
    }).get();

    console.log(query+' '+ where_clause.join(" AND "));
});

Upvotes: 0

Eugene Naydenov
Eugene Naydenov

Reputation: 7295

Try this:

//Submit Adv Search
$('#submitAdvSearch').click(function(){
    var query = "SELECT * FROM table WHERE ";
    var yo = $('.subCat span[data-value].checked').map(function(){
        return $(this).attr('data-value')+'=1 AND ';
    }).get();
    yo = yo.join(' ').replace(/\s*AND\s*$/, '');

    console.log(query+' '+yo);
});​

Upvotes: 0

Jo&#227;o Silva
Jo&#227;o Silva

Reputation: 91349

Use join(" AND ") to concatenate ANDs between each condition:

var yo = $('.subCat span[data-value].checked').map(function() {
  return $(this).attr('data-value')+'=1';
}).get();
console.log(query + yo.join(" AND "));

This will give you:

SELECT * FROM table WHERE 30000_doublefrotements=1 AND contemporain=1 AND transitionnel=1

Upvotes: 3

Related Questions