2014-04-10 3 views
2

У меня есть яваскрипта функцию, которая выглядит следующим образом:Уменьшить Javascript длину функции

function myfun(){ 
//product.1 
var t1=document.getElementById('1').innerHTML; 
var link = document.getElementsByClassName(t1); 

if(document.getElementsByClassName(t1).length==1){ 
document.getElementById(t1).innerHTML=link[0].outerHTML; 
document.getElementById(t1).getElementsByTagName('a')[0].className='dsad'; 

} 
if(document.getElementsByClassName(t1).length==2){ 
document.getElementById(t1).innerHTML=link[0].outerHTML+'; '+link[1].outerHTML; 
var element = document.getElementById(t1).getElementsByTagName('a')[0].className='dsad'; 
var element2 = document.getElementById(t1).getElementsByTagName('a')[1].className='dsad'; 
}... 
//product.2 
var t2=document.getElementById('2').innerHTML; 

Это идет как это до if(document.getElementsByClassName(t1).length==10), а затем продолжает элемент - document.getElementById('2') и так далее, пока он не достигнет числа элементов 10. Весь сценарий составляет около 700 строк, и я хочу как-то уменьшить его. Я думал о цикле for, но я не понимаю, как это реализовать. Какие-либо предложения?

+0

Что о прохождении id' атрибута элемента 'к функции и затем вызвать эту функцию снова и снова в цикле? – Lix

+0

Вы когда-нибудь слышали о петле for? – rikpg

+0

Обычно я не ссылаюсь на W3Schools, но пример, который они используют для цикла for for, - это именно то, что вы ищете. http://www.w3schools.com/js/js_loop_for.asp –

ответ

5

Try:

for(i = 1; i <= 10; i++){ 
    if(document.getElementsByClassName(t1).length == i){ 
    document.getElementById(t1).innerHTML=link[i-1].outerHTML; 
    document.getElementById(t1).getElementsByTagName('a')[ i-1 ].className = 'dsad'; 
    } 
} 

EDIT:

Если вы хотите также элемент идентификатор, чтобы увеличить Вы должны попробовать:

for(i = 1; i <= 10; i++){ 

var t1=document.getElementById(''+i).innerHTML; 
var link = document.getElementsByClassName(t1); 

     if(document.getElementsByClassName(t1).length == i){ 
     document.getElementById(t1).innerHTML=link[i-1].outerHTML; 
     document.getElementById(t1).getElementsByTagName('a')[ i-1 ].className = 'dsad'; 
     } 
    } 
+1

ElementID, t1 в этом случае также должен увеличиваться – user986959

+0

@ user986959 Итак, увеличьте его –

+0

u нужно 2 петли, один вложенных внутри другого. Один для идентификаторов, два для длин –

3

Вы можете попробовать это:

for(var id=1;id<=10;id++){ 
    var t1id=""+id; 
    var t1=document.getElementById(t1id).innerHTML; 
    var link = document.getElementsByClassName(t1); 
    for(var num=1;num<=10;num++){ 
     if(document.getElementsByClassName(t1).length==num){ 
      document.getElementById(t1).innerHTML=link[0].outerHTML; 
      document.getElementById(t1).getElementsByTagName('a')[0].className='dsad'; 
     } 
    } 
} 
+0

Вам не нужно использовать 'var t1id =" «+ id;», но это актуально (не отвечая как можно быстрее). Ответ – Liam

+1

Я знаю, я просто пытаюсь сделать код понятным и понятным. – DankMemes

3
function myfun(){ 
    for(i=1;i<=10;i++){ 
     var ti=document.getElementById(i).innerHTML; 
     var link = document.getElementsByClassName("t" + i); 

     if(link.length==1){ 
      link.innerHTML=link[0].outerHTML; 
      ti.getElementsByTagName('a')[i - 1].className='dsad'; 

     } 
     else if(link.length==2){ 
      ti.innerHTML=link[i - 1].outerHTML+'; '+link[i].outerHTML; 
      var element = ti.getElementsByTagName('a')[i - 1].className='dsad'; 
      var element2 = ti.getElementsByTagName('a')[i].className='dsad'; 
     } 
    } 
} 
+0

Не могли бы вы объяснить смутное объяснение? – Liam

+0

хорошо, что я пытаюсь выяснить, есть ли только один или несколько элементов с одним именем класса, я думаю, что эта функция достаточно ясна, чтобы указать ему/ей в правильном направлении –

2

Я не уверен в части кода. Поэтому я собираюсь предположить, что это зависит от идентификатора.

Первый я бы сделать, это создать объекты JavaScript с контентом, который вы хотите включить для Classname

var classNameDictionary = { 0 : 'dsad', 1 :'dsad, ...}; 

После того как вы это, то я буду реализовать цикл следующим образом:

function myFun(numElements){ 
    for(var i = 0; i < numElements; i++) { 
     var t = document.getElementById(''+i).innerHTML; 
     var link = document.getElementsByClassName(t); 
     document.getElementById(t).innerHTML = ""; 
     for(var j = 0; j < link.length; j++) { 
      document.getElementById(t).innerHTML +=link[j].outerHTML; 
      var element = document.getElementById(t).getElementsByTagName('a')[j].className = classNameDictionary[j]; 
     } 

    } 
} 

Я надеюсь, что это помогает

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