2010-06-21 8 views
1

J'ai donc généré cette table et chaque cellule reçoit un identifiant unique qui est r # C# où le # est la ligne/colonne. J'ai le code ci-dessous qui extrait le numéro de ligne et le numéro de colonne de l'ID de la cellule sur mouseover, et cela fonctionne très bien dans Firefox et Chrome, mais ne fonctionne pas dans Internet Explorer.Javascript regex ne fonctionne pas dans IE

var cell_id = $(this).attr("id"); 
var matches = /[a-z]+(\d+)[a-z]+(\d+)/(cell_id); 
var row = matches[1]; 
var col = matches[2]; 

Pourquoi cela ne fonctionne-t-il pas dans l'explorateur?

+0

A quoi ressemble le "id"? En quoi cela ne fonctionne-t-il pas? – Pointy

+0

NB: Si vous avez besoin du numéro de ligne et de colonne, pourquoi analysez-vous l'ID? Les cellules du tableau fournissent déjà cette information: '$ (this) [0] .cellIndex' et' $ (this) [0] .parentNode.rowIndex' – RoToRa

Répondre

3

Dans Internet Explorer, une expression régulière ne peut pas être utilisée en tant que fonction. L'équivalent est la méthode exec(), qui est implémentée par navigateur croisé.

var matches = /[a-z]+(\d+)[a-z]+(\d+)/.exec(cell_id); 


a estimé que cette réponse était un peu incomplète sans mentionner que Internet Explorer n'est pas le seul navigateur qui ne permet pas une expression régulière à exécuter comme une fonction. En fait, c'est une extension de Mozilla et elle n'est même pas définie dans les éditions ECMAScript 3ème ou 5ème. Vous pouvez facilement vérifier si elle est prise en charge en utilisant l'opérateur typeof:

if (typeof// == "function") 
    // Regex can be used like a function 
else if (typeof// == "object") 
    // Regex cannot be used like a function 

Je ne comprends pas vraiment pourquoi cela a même été mis en œuvre ou pourquoi vous voulez même de vérifier, il est préférable de simplement pécher par excès Du côté de la prudence et utilisez la méthode exec.

+1

oooo vous smarty :-) – Pointy

+0

Cela l'a fait. Je vous remercie :). Je ne le savais pas sur l'explorateur. – Bocochoco

+0

@Pointy: lol ne l'a découvert qu'à la fin de la semaine dernière, je n'ai jamais su que vous pouviez utiliser une regex en tant que fonction dans certaines implémentations. –