2016-12-02 5 views
-1

Ich benutze jquery, um eine JSON-Zeichenfolge für die übereinstimmende URL zu suchen und dann alle Daten innerhalb dieses Objekts abzurufen.jQuery.grep() entspricht URL www und nicht www, http/https

hole ich die URL mit

var url = window.location.href; 

Doch diese gibt

http://somesite.com/

in der JSON-String könnte eine der folgenden

etc etc.

Mein Code ist die URL anzupassen und dann etwas zu tun. Wie würde ich jQuery.grep() verwenden, um die verschiedenen Stil-URLs in der Abfrage zu verwenden? Unten ist mein Code soweit.

var url = window.location.href; 
var json = exampleJsonString; 
var js = JSON.parse(json); 
var result = $.grep(js, function(e){ return e.url == url; }); 

if (result.length == 0) { 
    // not found :(
    console.log('Not found'); 
} else if (result.length == 1) { 
    // Result matched 
    console.log(result); 

} 

else { 
    // multiple items found 
    console.log('multiple items found'); 
    console.log(result); 
} 

Was ich tun möchte, ist für somesite.com mit jquery grep überprüfen. Wie in dieser Zeile überprüft es, ob die Zeichenfolge gleich ist.

var result = $.grep(js, function(e){ return e.url == url; }); 
+0

Sie könnten 'http: //', 'www.' und' .com' von beiden entfernen und dann vergleichen. Wenn Sie an der Domain-Namensanpassung interessiert sind –

+0

Nun, natürlich hält Sie nichts davon ab, in Ihrer grep-Filter-Callback-Funktion nach verschiedenen Werten zu suchen. Aber vielleicht möchten Sie mit location.hostname anstatt mit dem vollständigen href (?) Beginnen - das könnte die Zuordnung erleichtern. (Wenn das funktioniert, hängt natürlich davon ab, welche spezifischen Ergebnisse Sie brauchen, worüber Sie nichts gesagt haben.) – CBroe

+0

Nun, das Problem ist, dass der Grep die JSON-Zeichenkette nach der URL durchsucht. Wenn es nicht passt, macht es den Rest nicht. Also mit $ .grep (js, funktion (e) {return e.url == url;}); wird genau dieser URL entsprechen, auch ein Trailing/wird es zwingen zu sagen, nicht gefunden. Ich weiß, wie man eine URL regexiert, aber was ich regexieren will, ist wahrscheinlich nur der Teil von somesite.com. Aber ich bin mir nicht sicher, wie ich jQuery.grep() sagen kann – ServerSideSkittles

Antwort

2

Sie können die Datensätze mit der Funktion grep filtern. Hier in Ihrem Fall möchten Sie verschiedene URLs im Objekt wie 'http://somesite.com/', 'http://somesite.com' usw. überprüfen, erwähnen Sie alle URLs, die Sie in der Grep-Funktion berücksichtigen möchten. Hier ist der Beispielcode.

var varObj = jQuery.grep(dataobject, function (a) { 
      if (a.url == "http://somesite.com/" || a.url == "http://somesite.com" || a.url == "http://www.somesite.com/") 
       return true; 
     }); 
+0

Danke, das scheint der eine zu sein. Ich habe auf eine Funktion in jquery grep gehofft, um mit URLs umzugehen, aber das ist die nächstbeste Sache :) – ServerSideSkittles

+0

Sie könnten die JavaScript-Reg-Ex in den Grep-Callback setzen, anstatt '==' zu verwenden. –

Verwandte Themen