24

文字列が「ビデオ」と一致する場合にのみスクリプトが機能するため、構文が間違っていることは間違いありません。文字列に「オーディオ」という単語が含まれている場合は無視されます。また、hrefタグの値が「#」であるため、「 ../../../index.html"は機能しません。

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>
4

9 に答える 9

92

これを正規表現に変換する方がはるかに短いです。

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

ちなみに、やろうとしていることはやらないでください。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 */
  }
});

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

于 2012-05-10T15:28:55.633 に答える
9

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

他の人はあなたを解決するための正しい方向に向けました。

于 2012-05-10T15:30:08.053 に答える
4

おそらく、indexOfの外にOR(||)演算子が必要だと思います。

if ((srcTag.indexOf('Video') !== -1) || (srcTag.indexOf('Audio') !== -1)) {
  ...
}
于 2012-05-10T15:28:12.560 に答える
2

必要なのは以下のような2つの別々のindexOfだと思います。

srcTag.indexOf('Video') != -1  || srcTag.indexOf('Audio') != -1
于 2012-05-10T15:27:43.077 に答える
1

ええ、あなたはこのようなことをする必要があるでしょう:

if (srcTag.indexOf('Video') > -1 || srcTag.indexOf('Audio') > -1) {
于 2012-05-10T15:27:54.217 に答える
1

複数の一致のインデックスを取得できる単純な再帰関数

function getMultipleIndexOf(str, searchQuery, acc = 0, result = []) {
  if (!str || !searchQuery) {
    return { result, acc };
  }
  const foundIndex = str.toLowerCase().indexOf(searchQuery.toLowerCase());
  if (foundIndex < 0) {
    return { result, acc };
  }
  return getMultipleIndexOf(
    str.slice(foundIndex + searchQuery.length),
    searchQuery,
    acc + foundIndex + searchQuery.length,
    [...result, acc + foundIndex]
  );
}

const res = getMultipleIndexOf('long text some how long text!!', 'te');
// { result: [ 5, 24 ], acc: 26 }

以前に見つかったテキストを追跡するために必要なaccを無視するだけです

于 2020-10-16T09:22:55.317 に答える
-1

正規表現を使用すると非常に高速になり、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です

于 2017-11-10T15:34:43.083 に答える
-2

これも機能します:

if (srcTag.indexOf('Video') >= -1 || srcTag.indexOf('Audio') >=-1 ) {
于 2013-11-28T09:43:41.360 に答える
-3

これは私のために働いた:

if (srcTag.indexOf('Video' | 'Audio' ) >= -1 ) {
于 2017-06-21T10:28:46.717 に答える