it-swarm.com.de

Mehrere String-Übereinstimmungen mit indexOf ()

Ich bin mir ziemlich sicher, dass meine Syntax falsch ist, weil das Skript nur funktioniert, wenn der String "Video" entspricht, wenn der String "Word" -Audio "enthält", wird es ignoriert. ../../../index.html "funktioniert nicht.

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

Es ist viel kürzer, dies in einen regulären Ausdruck zu verwandeln.

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

Nebenbei, tun Sie bitte nicht das, was Sie versuchen. Wenn Benutzer gebeten werden, Safari herunterzuladen, wenn sie Internet Explorer 8 verwenden, ist dies für das Internet und diesen Benutzer von Nachteil.

Um die Domäne an einen anderen Ort umzuleiten, sollten Sie .preventDefault() verwenden, damit der Browser dem Link nicht folgt:

$("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 */
  }
});

Wieder bitte nicht eigentlich mach das. Niemand möchte dieser Typ sein, und wenn Sie den Benutzern sagen, dass sie einen anderen Browser herunterladen sollen, sind Sie dieser Typ .

75
Sampson

'Video' || 'Audio' ist ein logisches ODER. Eine nicht leere Zeichenfolge ist implizit ein wahrer Wert in JavaScript. Daher wird das kurzgeschlossene OR nicht ausgewertet und dieser Wert wird auf 'Video' reduziert. Deshalb sehen Sie Ihre Ergebnisse.

Andere haben Sie in die richtigen Richtungen zur Lösung gebracht.

7
David M

Ich denke, Sie möchten den Operator OR (||) außerhalb von indexOf so haben:

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

Ich denke, was Sie brauchen, ist 2 separate indexOf wie unten,

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

Ja, du müsstest so etwas tun:

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

Das wird auch funktionieren:

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

Es ist mit Regex ziemlich schneller und mit XRegExp immer besser.

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

Die Ausführungszeit beträgt 0,10595703125ms

0
Mohan Dere