#javascript #if-statement #hyperlink
#javascript #if-инструкция #гиперссылка
Вопрос:
У меня есть скрипт, который указывает, что определенный элемент не отображается на определенной странице. Ниже приведен код, который я использовал:
<script type="text/javascript">
function callOnPageLoad()
{
var url = window.location.href;
if(url == "http://www.exampledomain.com")
{
document.getElementById('rolex').style.display = 'none';
}
}
</script>
Однако мне нужно добавить еще несколько URL-адресов в инструкцию if, как правильно это сделать?
Большое спасибо
Комментарии:
1. Топ-10 лучших книг по JavaScript, которые следует прочитать новичкам
2. Множество потенциальных проблем с этим кодом Хью, попробуй использовать некоторые из них с заглавной буквы в адресной строке, удалите www, отключите JS и т.д. И т.п.
Ответ №1:
Я предпочитаю генерировать ассоциативный массив, а затем проверять, установлена ли строка. Он может быть получен из AJAX, из другого скрипта и т.д. И не закодирован в градкоде if
<script type="text/javascript">
var urlArray = { "http://www.exampledomain.com" : true, "http://www.exampledomain.com/foobar.html" : true };
function callOnPageLoad()
{
var url = window.location.href;
if( urlArray[url] )
{
document.getElementById('rolex').style.display = 'none';
}
}
</script>
Комментарии:
1. Обратите внимание, что объекты по умолчанию имеют множество свойств, поэтому «URL», такие как
toString
илиeval
, также будут приниматься. Чтобы предотвратить это, используйтеif (urlArray.hasOwnProperty(url))
вместоif (urlArray[url])
.2. 1 для этого, я думаю, это может быть быстрее, чем другие предложения (несколько or, в operator, для цикла). Конечно, разница в производительности не создает проблемы, но…
Ответ №2:
if(url == "http://www.exampledomain.com" || url == "http://www.anotherdomain.com")
{
}
Ответ №3:
Добавьте больше условий в блок if:
<script type="text/javascript">
function callOnPageLoad()
{
var url = window.location.href;
if(url == "http://www.exampledomain.com" || url == "anotherurl" || url == "andanother")
{
document.getElementById('rolex').style.display = 'none';
}
}
</script>
Ответ №4:
создайте массив URL-адресов и выполните итерацию
function callOnPageLoad()
{
var urls = [
"http://www.exampledomain.com",
"http://www.exampledomain2.com"
];
var url = window.location.href;
for ( var i=0; i < urls.length; i ) {
if(url == urls[i])
{
document.getElementById('rolex').style.display = 'none';
break;
}
}
}
Комментарии:
1. я думаю, что лучше использовать оператор «in», чем использовать цикл
2. Есть ли у вас какие-либо тесты, которые «in» выполняются быстрее, чем цикл for?
Ответ №5:
вы можете создать массив этих URL-адресов и запустить для них цикл for, это будет более динамичный подход к вашей проблеме.
использование длинных операторов if не рекомендуется, потому что вы можете потерять символ здесь или немного логики там
Если ваши URL-адреса указывают на внешние URL-адреса или соответствуют другим шаблонам, чтобы вы могли отличить их от других URL-адресов, вы можете использовать его без массива.
Ответ №6:
function callOnPageLoad(type)
{
var url = window.location.href;
var urls=new array("http://www.exampledomain1com","http://www.exampledomain2.com");
if(url in urls){
document.getElementById('rolex').style.display = 'none';
}
}
Комментарии:
1. Покажите мне место, где это тогда работает? Это не означает: jsfiddle.net/KooiInc/nTyms
Ответ №7:
if(url == "http://www.exampledomain.com" || url =="http://www.url2.com" || url == "http://www.url3.com")
и так далее … ?