2012-05-10 17 views
15

文字列に "audio"という文字列が含まれている場合、文字列が "Video"と一致する場合にのみスクリプトが機能するため、 "#" "../../../index.html" のdoesntの仕事のためのリダイレクトの値。複数の文字列が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( 'ビデオ')> -1 || srcTag.indexOf( 'Audio')> -1 –

+0

この部分に絶対URLを使用してみてください: window.location = '../../../index。html ' – bygrace

+0

これはローカルで実行されるため、ユーザーがドライブする文字を知る方法がないため、相対URLである必要があります。 – Blainer

答えて

61

これを正規表現にするのははるかに短いです。

あなたがしようとしていることをしないでください。 Internet Explorer 8を使用しているときにSafariをダウンロードするようユーザーに求めているのは、インターネットだけでなく、そのユーザーに不快感を与えることです。

別の場所にドメインをリダイレクトするためとして、あなたはリンク以下からブラウザを保つために.preventDefault()を使用する必要があります。

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

が実際にこれをしないでください。誰もその男性になりたがっていて、別のブラウザをダウンロードするようにユーザーに指示すると、その男性になります。

+2

/(video | audio)/ .test(srcTag)は私にとってよりよく見えます。 –

+0

これは完全に機能します。私はOPを更新しました。 – Blainer

+0

str.r.exexOf( 'string')は正規表現より高速ですか? – qodeninja

3

必要が2つの別のindexOfのように、

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

うん、あなたはこのような何かする必要があるだろうが、この操作を行います。

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

+1 indexOfはregExよりも速い – qodeninja

+1

@ qodeninja: 'test()'(regex)はもっと効率的になります(https://jsperf.com/zotero/1) – Wolf

4

を私はあなたがおそらくようindexOfの外OR(||)演算子をしたいと思う:

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

'Video' || 'Audio'は論理和です。空でない文字列はJavaScriptでは暗黙的に真の値であるため、短絡されたORは評価されず、これはただちに'Video'に崩壊します。これが、あなたが行った結果を見る理由です。

解決策の正しい指示が他にあります。

+0

実際に彼のエラーがどこにあるかを説明していただきありがとうございます。**なぜエラーが発生していますか? –

0

また、これは動作します:

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

常に-1より大きいか等しいでしょうか? –

-1

これが私の仕事:

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

これは文字通り常にtrueを返します。https://jsfiddle.net/6rnaoa0u/ – Liam

+0

[bitwise演算子](https://developer.mozilla.org/en-US/docs)を読んでください。/Web/JavaScript /リファレンス/演算子/ Bitwise_Operators) – Liam

0

そのかなり速く正規表現で、これまでより良いXRegExpと。

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

実行時間は0.10595703125ms

関連する問題