2015-06-21 2 views
0

Я следующие аналогичные куски кода:Регулярное выражение для функции яваскрипта getElementById

document.getElementById('caption1').onclick = function() { 
    window.open("#abstract1","_self"); 
    if(document.getElementById('abstract1').style.display == 'none') { 
     document.getElementById('abstract1').style.display = ''; 
    } 
    else { 
     document.getElementById('abstract1').style.display = "none";        
    } 

}; 
document.getElementById('caption2').onclick = function() { 
    window.open("#abstract2","_self"); 
    if(document.getElementById('abstract2').style.display == 'none') { 
     document.getElementById('abstract2').style.display = ''; 
    } 
    else { 
     document.getElementById('abstract2').style.display = "none";        
    } 

}; 
document.getElementById('caption3').onclick = function() { 
    window.open("#abstract3","_self"); 
    if(document.getElementById('abstract3').style.display == 'none') { 
     document.getElementById('abstract3').style.display = ''; 
    } 
    else { 
     document.getElementById('abstract3').style.display = "none";        
    } 

}; 

Код идет на так до 9. Вместо того, чтобы писать так много подобных фрагментов кода, как я могу просто написать тот, который будет работать для. Возможно, я должен написать некоторое Regex, но как?

+3

Я не уверен, почему вы думаете, что регулярное выражение поможет здесь. Вы можете заменить 9 подобных блоков одним блоком внутри цикла for. Или вы можете использовать делегированный обработчик событий в родительском элементе, а внутри этого обработчика проверить идентификатор элемента clicked. – nnnnnn

+0

Я рекомендую использовать делегирование событий в содержащем div. – user2182349

+1

Это не плохой вопрос, только ОП неправильно предложил использовать RegEx – Downgoat

ответ

4

Просто конкатенации переменной с вашей строки. Также, принимая @squints советы использования функции вместо создания десятка анонимных функций объектов

someFunction(){ 
    var id = "abstract" + this.id.substr(7); 
    window.open("#" + id,"_self"); 

    el = document.getElementById(id); 
    el.style.display = (el.style.display === 'none') ? '' : "none"; 
} 

for(var x = 0; x < 10; x++){ 
    document.getElementById('caption' + x).onclick = someFunction; 
} 
+1

'x' не будет значение, которое вы ожидаете. Вместо этого используйте 'this'. –

+0

@squint Хорошо поймать, я исправлю это – Gary

+1

+1 Единственное, что я хотел бы предложить удалить из цикла, чтобы вы не создавали несколько объектов функций. Но это не так уж и важно. –

Смежные вопросы