Несколько совпадений строк с indexOf()

Я уверен, что мой синтаксис неверен, потому что скрипт работает только в том случае, если строка соответствует "Видео", если в строке есть слово "Аудио", оно игнорируется. Кроме того, поскольку теги 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>

Ответ 1

Это гораздо короче, чтобы превратить это в регулярное выражение.

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

На стороне заметьте, пожалуйста, не делайте то, что вы пытаетесь сделать. Просить пользователей загружать Safari, когда они используют Internet Explorer 8, оказывает плохую услугу в Интернете, а также для этого пользователя.

Что касается перенаправления домена в другое место, вы должны использовать .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' 'Video' || 'Audio' - логическое ИЛИ. Непустая строка неявно является истинным значением в JavaScript, и, следовательно, короткозамкнутый ИЛИ не оценивается, и это сворачивается только к 'Video'. Вот почему вы видите результаты, которые вы делаете.

Другие указали вам правильные пути решения.

Ответ 3

Я думаю, вам, вероятно, нужен OR (||) оператор вне indexOf так:

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

Ответ 4

Я думаю, что вам нужно 2 отдельных indexOf, как показано ниже,

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

Ответ 5

Да, вам нужно что-то подобное сделать:

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

Ответ 6

Это также будет работать:

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

Ответ 7

Его довольно быстро с регулярным выражением и все лучше с 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

Ответ 8

Это работало для меня:

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