web-dev-qa-db-fra.com

Plusieurs correspondances de chaîne avec indexOf ()

Je suis presque sûr que ma syntaxe est erronée, car le script ne fonctionne que si la chaîne correspond à "Vidéo". Si la chaîne contient "Word" Audio ", elle est ignorée. ../../../index.html "ne fonctionne pas.

js

var ua = navigator.userAgent.toLowerCase();
var isIE8 = /MSIE 8.0/i.test(ua);
if (isIE8) {
    $('a').click(function () {
        var srcTag = $(this).find('img').attr('src');
        if (srcTag.indexOf('Video' || 'Audio') > -1) {
            if (confirm('Download Safari? \n\n http://Apple.com/safari/download/')) {
            window.location = 'http://Apple.com/safari/download/';
            } else { window.location = '../../../index.html';}
        } else {
            alert('no match');
        }
    });
}

html

<a href="#"><img src="Video/000_Movies/assets/005_CCC_Jesus_Story_80x60.jpg" />test1</a> 
<a href="#"><img src="Audio/000_Movies/assets/006_GSP_Gods_Story_80x60.jpg" />test2</a> 
<a href="#"><img src="Media/000_Movies/assets/002_God_Man_80x60.jpg" />test3</a>
18
Blainer

Il est beaucoup plus court de transformer cela en une expression régulière.

if ( srcTag.match( /(video|audio)/ ) ) {
  /* Found */
} else {
  /* Not Found */
}

Sur une note de côté, s'il vous plaît ne faites pas ce que vous essayez de faire. Demander aux utilisateurs de télécharger Safari lorsqu'ils utilisent Internet Explorer 8 nuit à Internet, ainsi qu’à cet utilisateur.

En ce qui concerne la redirection du domaine vers un autre emplacement, vous devez utiliser .preventDefault() pour empêcher le navigateur de suivre le lien:

$("a.videoDownload").on("click", function(e){
  e.preventDefault();
  if ( this.getElementsByTagName("img")[0].src.match( /(video|audo)/ ) ) {
    window.location = confirm( 'Download Safari?' )
      ? "http://Apple.com/safari/download" 
      : "../../../index.html" ;
  } else {
    /* No match */
  }
});

Encore une fois, ne faites pas réellement ceci. Personne ne veut être ce type, et lorsque vous dites aux utilisateurs de télécharger un autre navigateur, vous êtes ce type.

75
Sampson

'Video' || 'Audio' est un OU logique. Une chaîne non vide est implicitement une valeur vraie en JavaScript. Par conséquent, le OR court-circuité n'est pas évalué et cela se réduit à 'Video'. C'est pourquoi vous voyez les résultats que vous faites.

D'autres vous ont indiqué la bonne direction à résoudre.

7
David M

Je pense que vous voulez probablement que l'opérateur OR (||) ne soit pas indexOf comme suit:

if ((srcTag.indexOf('Video') !== -1) || (srcTag.indexOf('Audio') !== -1)) {
  ...
}
5
howard10

Je pense que ce dont vous avez besoin, c'est 2 index séparés,

srcTag.indexOf('Video') != -1  || srcTag.indexOf('Audio') != -1
3

Oui, vous auriez besoin de quelque chose comme ceci:

if (srcTag.indexOf('Video') > -1 || srcTag.indexOf('Audio') > -1) {
2
bygrace

Cela fonctionnera également:

if (srcTag.indexOf('Video') >= -1 || srcTag.indexOf('Audio') >=-1 ) {
0
Somnath Kharat

C'est assez rapide avec regex et toujours meilleur avec XRegExp .

var sourceString = 'hello world, i am web developer';
if (XRegExp.test(sourceString, /(hello|web)/)) {
  // yes, `hello` or  `web` is found in `sourceString`
}

Le temps d’exécution est de 0.10595703125ms

0
Mohan Dere