2010-01-06 8 views
1

je l'adresse suivante:éraflure id de l'URL en utilisant javascript

http://www.abebooks.com/servlet/BookDetailsPL?bi=1325819827&searchurl=an%3DLofting%252C%2BHugh.%26ds%3D30%26sortby%3D13%26tn%3DDOCTOR%2BDOLITTLE%2527S%2BGARDEN. 

bi est un identifiant pour le livre spécifique. Comment puis-je extraire l'ID du livre à partir du lien?

Merci!

+0

Voir http://stackoverflow.com/questions/128028/best-way-to-safely-read-query-string-parameter s (première moitié de la question). –

Répondre

1
function getBookId() 
{ 
    var query = document.location.split("?")[1]; 
    var values = query.split("&"); 
    for(var i = 0; i < values.length; i++) 
    { 
     a = values[i].split("="); 
     if(a[0] === "bi") 
      return a[1]; 
    } 
    //some error occurred 
    return null; 
} 
+1

peut-être une regex est plus facile ici? – miku

+1

Bien que l'idée soit bonne, je suggère d'utiliser 'var values ​​= location.search.substring (1) .split ('&');' –

2

Vous pouvez pour utiliser cette regex:

var address = "http://www.abebooks.com/servlet/BookDetailsPL?bi=1325819827&..."; 
var bi = /[\?&]bi=(\d+)/.exec(address)[1] 
alert(bi) 
+1

faites attention si 'bi' n'est pas le premier paramètre de l'URL, c.-à-d. pas toujours être préfixé avec '?' mais peut aussi être préfixé avec '&' – Funka

+0

@Funka, bon point, –

0

Vous pouvez extraire l'identifiant du livre (supposé être uniquement des nombres) via une expression régulière (et regroupement).

var s = "http://www.abebooks.com/servlet/BookDetailsPL?\  
     bi=1325819827&searchurl=an%3DLofting%252C%2BHugh.\ 
     %26ds%3D30%26sortby%3D13%26tn%3DDOCTOR%2BDOLITTLE\ 
     %2527S%2BGARDEN." 

var re = /bi=([0-9]+)&/; // or equally: /bi=(\d+)&/ 

var match = re.exec(s); 

match[1]; // => contains 1325819827 
+0

fixe si 'bi' est le dernier paramètre, il ne sera pas suivi d'un' & '. J'imagine que ce serait '/ bbi = (\ d +) \ b /' - '\ b' correspond à une limite de mot, mais je ne suis pas sûr que' something-bi = 1235 & bi = 456' est une chaîne de requête valide - c'est pourquoi je suis allé avec js. – Amarghosh

0

address.split ("bi =") [1] .split ("&") [0]

+0

cela pourrait également correspondre à quelque chose comme 'xyzbi =' ou 'otherbi =' qui ne serait pas l'effet prévu ... – Funka

0

Essayez cette

var bookId 
var matcher = location.search.match(/(?:[?&]bi=([^&]+))/); // Assuming window.location 

if (null !== matcher) { 
     bookId = matcher[1]; 
} 
0

J'ai eu une fois le même problème.
J'ai créé une petite fonction pour m'aider. Je ne sais pas où il est, mais j'ai réussi à le recréer:

function get(item,url) { 
    if (url == undefined) 
     url = window.location.href;    

    var itemlen = item.length 
    var items = url.split('?')[1].split('&'); 
    for (var i = 0, len = items.length;i<len;i++) { 
     if (items[i].substr(0,itemlen) == item) 
      return items[i].split('=')[1]; 
    } 

    return null; 
} 

Donc, vous l'utiliser comme:

get('bi'); 

Si l'URL que vous avez donné a été votre URL actuelle, sinon vous pourriez faire :

get('bi','http://www.abebooks.com/servlet/BookDetailsPL?bi=1325819827&searchurl=an%3DLofting%252C%2BHugh.%26ds%3D30%26sortby%3D13%26tn%3DDOCTOR%2BDOLITTLE%2527S%2BGARDEN.') 

espoir Je ne laisse en aucun bogues :)

Questions connexes