2012-05-10 39 views
15

Jestem pewien, że moja składnia jest zła, ponieważ skrypt działa tylko wtedy, gdy ciąg znaków pasuje do "wideo", jeśli ciąg ma słowo "dźwięk", jest ignorowany. wartość "#" przekierowania dla "../../../index.html" robi praca.Wiele dopasowań ciągów z indexOf()

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> 
+1

srcTag.indexOf ('Film')> -1 || srcTag.indexOf ('Audio')> -1 –

+0

spróbuj użyć bezwzględnego adresu URL dla tej części: window.location = '../../../index.html ' – bygrace

+0

musi to być względny adres URL, ponieważ będzie działał lokalnie i nie będzie sposobu, aby dowiedzieć się, jakie będą litery dysku dla użytkowników. – Blainer

Odpowiedz

61

O wiele krótsze jest przekształcenie tego w wyrażenie regularne.

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

Na marginesie, proszę nie rób tego, co próbujesz zrobić. Prośba użytkowników o pobranie Safari podczas korzystania z przeglądarki Internet Explorer 8 jest szkodliwa dla Internetu, a także dla tego użytkownika.

chodzi o przekierowanie domeny do innej lokalizacji, należy użyć .preventDefault() zachować przeglądarkę następujący link:

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

Ponownie proszę nie faktycznie to zrobić. Nikt nie chce być tym facetem, a kiedy powiesz użytkownikom, aby pobrać inną przeglądarkę, jesteś ten facet.

+2

/(wideo | audio)/.test (srcTag) wygląda mi lepiej. –

+0

to działa idealnie. Zaktualizowałem mój OP. – Blainer

+0

isnt str.indexOf ('string') szybciej niż regex? – qodeninja

3

myślę, czego potrzeba 2 oddzielnych indexOf jak poniżej,

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

Tak, trzeba by było coś takiego to zrobić:

if (srcTag.indexOf('Video') > -1 || srcTag.indexOf('Audio') > -1) { 
+0

+1 indexOf jest szybszy niż regEx – qodeninja

+1

@qodeninja: tylko z jednym ciąg, ale w porównaniu z wieloma przeszukiwaniami 'indexOf()', takimi jak wyżej, 'test()' (regex) staje się [bardziej wydajne] (https://jsperf.com/zotero/1) – Wolf

4

myślę, że pewnie chcą OR (||) operatora poza indexOf jak tak:

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

'Video' || 'Audio' jest logicznym OR. Niepusty łańcuch jest niejawnie prawdziwą wartością w kodzie JavaScript, a zatem zwarta OR nie jest oceniana, a ta zapada się tylko na 'Video'. Dlatego widzisz wyniki, które robisz.

Inni wskazali ci właściwy kierunek, aby rozwiązać.

+0

Dziękuję za wyjaśnienie, gdzie znajduje się jego błąd i ** dlaczego ** powoduje błąd –

0

Będzie to również działa:

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

. Czy zawsze będzie większy lub równy -1? –

-1

Ten pracował dla mnie:

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

To dosłownie zawsze zwraca prawdę, niezależnie od tego, co https://jsfiddle.net/6rnaoa0u/ – Liam

+0

Powinieneś prawdopodobnie przeczytać na czym polega [operator bitowy] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) – Liam

0

Jego dość szybciej regex i coraz lepiej z XRegExp.

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

Czas działania wynosi 0.10595703125ms

Powiązane problemy