Несколько совпадений строк с 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 ) {