我很确定我的语法错误,因为只有字符串匹配“Video”时脚本才有效,如果字符串有“word”音频“它被忽略。此外,因为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>
答案 0 :(得分:76)
将它变成正则表达式要短得多。
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 */
}
});
同样,请不要实际这样做。没有人想成为那个人,当你告诉用户下载另一个浏览器时,你就是那个人。
答案 1 :(得分:7)
'Video' || 'Audio'
是一个逻辑OR。非空字符串在JavaScript中隐式地是一个真值,因此不会评估短路的OR,这会折叠到'Video'
。这就是你看到你的结果的原因。
其他人指出了正确的解决方向。
答案 2 :(得分:5)
我认为您可能希望indexOf之外的OR(||)运算符如此:
if ((srcTag.indexOf('Video') !== -1) || (srcTag.indexOf('Audio') !== -1)) {
...
}
答案 3 :(得分:3)
我认为你需要的是2个单独的indexOf,如下所示,
srcTag.indexOf('Video') != -1 || srcTag.indexOf('Audio') != -1
答案 4 :(得分:2)
是的,你需要做这样的事情:
if (srcTag.indexOf('Video') > -1 || srcTag.indexOf('Audio') > -1) {
答案 5 :(得分:0)
这也有效:
if (srcTag.indexOf('Video') >= -1 || srcTag.indexOf('Audio') >=-1 ) {
答案 6 :(得分: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
答案 7 :(得分:0)
简单的递归函数,您可以获取多个匹配项的索引
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来跟踪先前找到的文本
答案 8 :(得分:-2)
这对我有用:
if (srcTag.indexOf('Video' | 'Audio' ) >= -1 ) {