私の検索は、選択フィルタによって実行される以下のJSONを持っている:正確なタグとJavaScriptでJSONを検索
{
"Books": [
{
"title": "Book 1",
"binding": "paperback",
"category": "pop",
"language": "english",
"author": "male"
},
{
"title": "Book 2",
"binding": "hardcover",
"category": "pop rock,electro pop",
"language": "french",
"author": "female"
},
{
"title": "Book 3",
"binding": "audiobook",
"category": "soft rock",
"language": "german",
"author": "male,female"
},
{
"title": "Book 4",
"binding": "boxed set",
"category": "rock,classic rock",
"language": "english",
"author": "female,male"
},
{
"title": "Book 5",
"binding": "paperback",
"category": "electro pop,rock,classic rock",
"language": "french",
"author": "male/female"
},
{
"title": "Book 6",
"binding": "paperback",
"category": "rock",
"language": "french",
"author": "male"
}
]
}
利用できるフィルタは、私はから検索するdefiant.jsを使用しています
Binding
-Paperback
-Hardcover
-Audiobook
-Boxed Set
Category
-Classic Rock
-Pop
-Pop Rock
-Electro Pop
-Soft Rock
-Rock
Language
-German
-English
-French
Author
-Male
-Female
-Male/Female
ですJSON。私は次のクエリを使用する場合:私は最初のフィルタを結合でクリックしたときに
var thequery = [];
for (var i in searchTags) {
for (var j = 0; j < searchTags[i].length; j++) {
thequery.push('contains(' + i + ' ,"' + searchTags[i][j] + '")');
}
}
var thequeryString = thequery.join(' and ');
console.log('//*[' + firstqueryString + ']');
return '//*[' + thequeryString + ']';
は、それでは私が手クエリが//*[contains(binding ,"paperback")]
であると私は二度目のクリックしたときに返されたクエリが//*[contains(binding ,"paperback") and contains(binding ,"boxed set")]
であり、これはその後、正しく結果をフィルタリングします。
しかし、私は私が手//*[contains(category ,"rock")]
クエリで、その後のジャンルpop
を持っているブックを取得したい場合、問題は今ある
- ブック2
- ブック3
- 帳4
- ブック5
- 本6
しかし実際には本4,本5と本6はロックカテゴリです。
私が試した他のクエリは次のとおりです。
var thequery = [];
for (var i in searchTags) {
for (var j = 0; j < searchTags[i].length; j++) {
if(i == 'author' || i == 'category'){
thequery.push(i + '[contains(.,"' + searchTags[i][j] + ',")] or ' + i + '[contains(.,",' + searchTags[i][j] + '")] or ' + i + '="' + searchTags[i][j] + '"');
}else{
thequery.push('contains(' + i + ' ,"' + searchTags[i][j] + '")');
}
}
}
var thequeryString = thequery.join(' and ');
console.log('//*[' + firstqueryString + ']');
return '//*[' + thequeryString + ']';
そして私が手クエリが返す//*[category[contains(.,"rock,")] or category[contains(.,", rock")] or category ="rock"]
次のとおりです。
- ブック2
- 帳4
- ブック5
- ブック6
私が得ることができる最も近いのはここだけです。
だから、私は2つの問題があるすべての要約:私がクリックした正確なフィルタでブックをフィルタリングする方法
- を。例えば。私がロックをクリックすると、カテゴリロックを含む書籍のみが返されます。
- 私は
//*[category[contains(.,"rock,")] or category[contains(.,", rock")] or category ="rock"]
を使用して、最初はまたはが含まれているとして、それは正しい結果をフィルタリングしませんand
とメインthequeryStringでそれに参加した場合。
助けてください。
注:defiantjsには、クエリを確認できる「XPath評価ツール」もあります。
に存在するかどうかを見つけるために
indexOf
を使用するためには、あなたは明らかにしてくださいすることができ、私が言及している予想される出力 – brkが何であるかを明確にそれは2度の質問です。私が 'ロック'をクリックすると、ロック3のカテゴリーのみがあるので、ブック4、ブック5、ブック6のみを入手してください。だから、私は正確にクリックされたタグを持つ結果をフィルタリングする必要があります。 – hashtagerrors