Je suis presque sûr que ma syntaxe est erronée, car le script ne fonctionne que si la chaîne correspond à "Vidéo". Si la chaîne contient "Word" Audio ", elle est ignorée. ../../../index.html "ne fonctionne pas.
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>
Il est beaucoup plus court de transformer cela en une expression régulière.
if ( srcTag.match( /(video|audio)/ ) ) {
/* Found */
} else {
/* Not Found */
}
Sur une note de côté, s'il vous plaît ne faites pas ce que vous essayez de faire. Demander aux utilisateurs de télécharger Safari lorsqu'ils utilisent Internet Explorer 8 nuit à Internet, ainsi qu’à cet utilisateur.
En ce qui concerne la redirection du domaine vers un autre emplacement, vous devez utiliser .preventDefault()
pour empêcher le navigateur de suivre le lien:
$("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 */
}
});
Encore une fois, ne faites pas réellement ceci. Personne ne veut être ce type, et lorsque vous dites aux utilisateurs de télécharger un autre navigateur, vous êtes ce type.
'Video' || 'Audio'
est un OU logique. Une chaîne non vide est implicitement une valeur vraie en JavaScript. Par conséquent, le OR court-circuité n'est pas évalué et cela se réduit à 'Video'
. C'est pourquoi vous voyez les résultats que vous faites.
D'autres vous ont indiqué la bonne direction à résoudre.
Je pense que vous voulez probablement que l'opérateur OR (||) ne soit pas indexOf comme suit:
if ((srcTag.indexOf('Video') !== -1) || (srcTag.indexOf('Audio') !== -1)) {
...
}
Je pense que ce dont vous avez besoin, c'est 2 index séparés,
srcTag.indexOf('Video') != -1 || srcTag.indexOf('Audio') != -1
Oui, vous auriez besoin de quelque chose comme ceci:
if (srcTag.indexOf('Video') > -1 || srcTag.indexOf('Audio') > -1) {
Cela fonctionnera également:
if (srcTag.indexOf('Video') >= -1 || srcTag.indexOf('Audio') >=-1 ) {
C'est assez rapide avec regex et toujours meilleur avec XRegExp .
var sourceString = 'hello world, i am web developer';
if (XRegExp.test(sourceString, /(hello|web)/)) {
// yes, `hello` or `web` is found in `sourceString`
}
Le temps d’exécution est de 0.10595703125ms