1

HTML サイト検索に以下のスクリプトを使用しています。

私が抱えている問題は、XML全体で単語を個別に検索したいときに、単語を1つのフレーズとしてまとめて検索することです。つまり、誰かが「デジタル プロデューサー」と入力すると、「デジタル」と「プロデューサー」という言葉を別々に検索するのではなく、「デジタル プロデューサー」が検索されます。

これを機能させるための助けがあれば大歓迎です!

$(document).ready(function(){

//GLOBAL VAR
var XMLSource = $('#data').attr('xmlData');
var keyword = '';
var catType = '';
var pub = '';

var i = 0;

$("#searchButton").click(function() {
    keyword = $("input#term").val();
    catType = $("#category option:selected").val();

    //Reset any message
    var errMsg = '';
    pub = '';

    if ( keyword == '' ) { errMsg += 'Please Enter Search Term' + '\n'; }
    else if ( catType == 'none' ) { errMsg += 'Please Select Category' + '\n'; }
    else { searchThis(); }

    if ( errMsg != '' ) {
        pub += '<div class="error">' + '\n';
        pub += errMsg;
        pub += '</div>' + '\n';
    }

    //Show error
    $('#result').html( pub );

});

function searchThis() {             
    $.ajax({
        type: "GET",
        url: XMLSource,
        dataType: "xml",
        success: function(xml) { loadPublication (xml) }    
    });
}

function loadPublication (xmlData) {
    i = 0;
    var row;

    var searchExp = "";

    $(xmlData).find('Job').each(function(){

        var SearchTitle = $(this).find('SearchTitle').text();
        var Description = $(this).find('Description').text();
        var EmailTo = $(this).find('EmailTo').text();

        //Format the keyword expression
        var exp = new RegExp(keyword,"gi");

        //Check if there is a category selected; 
        //if not, use EmailTo column as a default search
        if ( catType == 'SearchTitle' ) { searchExp = SearchTitle.match(exp); }
        else if ( catType == 'Description' ) { searchExp = Description.match(exp); }
        else if ( catType == 'EmailTo' ) { searchExp = EmailTo.match(exp); }

        if ( searchExp != null ) {

            //Start building the result
            if ((i % 2) == 0) { row = 'even'; }
            else { row = 'odd'; }

            i++;                

            pub += '<tr class="row ' + row + '">' + '\n';
            pub += '<td valign="top" class="col1">' + SearchTitle + '</td>' + '\n'; 
            pub += '<td valign="top" class="col2">' + Description + '</td>' + '\n'; 
            pub += '<td valign="top" class="col3">' + EmailTo + '</td>' + '\n'; 
            pub += '</tr>' + '\n';
        }   
    });

    if ( i == 0 ) {
        pub += '<div class="error">' + '\n';
        pub += 'No Result Found' + '\n';    
        pub += '</div>' + '\n';

        //Populate the result
        $('#result').html( pub );
    }
    else {
        //Pass the result set
        showResult ( pub );
    }
}

function showResult (resultSet) {

    //Show the result
    pub = '<table id="grid" border="0">' + '\n';
    pub += '<thead><tr>' + '\n';
    pub += '<th class="col1">Job Title</th>' + '\n';
    pub += '<th class="col2">Job Description</th>' + '\n';
    pub += '<th class="col3">Apply To</th>' + '\n';
    pub += '</tr></thead>' + '\n';
    pub += '<tbody>' + '\n';

    pub += resultSet;

    pub += '</tbody>' + '\n';
    pub += '</table>' + '\n';

    //Populate 
    $('#result').html(pub)

    $('#grid').tablesorter(); 
}
});
4

1 に答える 1

1

正規表現を使用しているため、元の検索文字列のすべてのスペースを OR 演算子に置き換えることができます|(<- わかりにくい場合は、パイプ [ shift + \ ] です)。keyword = keyword.replace(" ", "|");直前に行を追加してこれを行うことができますvar exp = new RegExp(keyword,"gi");

これがあなたにとってうまくいくかどうか、そしてそれが理にかなっているのかどうか教えてください:)

いくつかの参照:
JavaScript 置換 - http://www.w3schools.com/jsref/jsref_replace.asp
正規表現演算子 - http://introcs.cs.princeton.edu/java/72regular/

于 2013-04-14T10:06:38.377 に答える