2015-04-10 3 views
-1

Я пытаюсь программно изменить элемент в jQuery, то есть число в docID увеличивается до максимального числа. Я заменяю текст на ряд изображений на странице от Скачать до Просмотр. Если я использую #ctl00_cphMainContent_dlProductList_ct100_ctl00_lnkProofDownload вместо docID в части кода $(docID).text(...), текст будет заменен правильно. Когда я использую переменную docID на своем месте, она не работает.Замена элемента в jQuery

Что я здесь делаю неправильно?

Спасибо.

var max = 10;  
var count = 100; 

var s1 = "#ctl00_cphMainContent_dlProductList_ct"; 
var s2 = "_ctl00_lnkProofDownload"; 
var docID = ""; 

for (i = 1; i <= max; i++) 
{ 
    docID = s1.concat (count++, s2); 

    $(document).ready(function() { 
    $(docID).text(function(i, oldText) { 
     return oldText === 'Download' ? 'View' : oldText; 
    }); 
    }); 
} 

Этот HTML код может быть изменен. Слово «Загрузка» заменяется «Просмотр».

<a id="ctl00_cphMainContent_dlProductList_ctl00_ctl00_lnkProofDownload" 
    href="../../../Controls/StaticDocProof.ashx?qs=op/5WlcUxeg849UT973Mwf0ZnNcMLfe3JYAe7EnJORsdyETYV1vcKaj0ROc2VrN5fXfYjO2MM6BUYXzX2UKmog==" 
    >Download</a> 
+0

вы также можете поделиться сгенерированным html? – Sushil

+1

Там много чего не так .. для одного, ваша функция doc.ready находится в цикле ... – vol7ron

+0

подготовьте скрипку, пожалуйста – dolek

ответ

1

Похоже, что вы сделали пару вещей неправильно в своем коде, в том числе используя 1 вместо l. Если это должно было быть 100 вместо l00, что-то больше, как это будет работать:

jQuery(function() { 
    var max = 10, 
     count = 100, 
     s1 = 'ctl00_cphMainContent_dlProductList_ct', 
     s2 = '_ctl00_lnkProofDownload', 
     docID; 

    for (var i = count; i <= count + max; i++) { 
     docID = s1 + i + s2; 
     jQuery('#' + docID).text(function (idx, oldText) { 
      return oldText === 'Download' ? 'View' : oldText; 
     }); 
    } 
}); 

Fiddle здесь: http://jsfiddle.net/ochguL2d/

В противном случае, дайте нам знать, если он должен быть l00 для другого ответ.

+0

Спасибо Dufmaster33. Ваши решения работают. Я прошу прощения за мой плохо сформулированный вопрос, ошибку (ctl) в HTML и мое ограниченное понимание jQuery (который я все еще изучаю). Вы спасли меня довольно много времени на другом решении, которое я бы использовал вместо этого. – UltraJ

0

Ваш a элемент имеет это в середине (обратите внимание на два "ELS"):

ctl00_ctl00 

& hellip; но ваш docID имеет это в середине (обратите внимание на «один и эль»):

ct100_ctl00 

Исправьте HTML, и ваш код работает как есть: http://jsfiddle.net/5c7hwyts/

Однако, это нечетный способ написать jQuery.

Вот другой подход:

$('a').text(function(i, oldText) { 
    var num= parseInt(this.id.split('ctl00_cphMainContent_dlProductList_ct')[1]); 
    if(num>=100 && num<110) { 
    return oldText === 'Download' ? 'View' : oldText;  
    } 
}); 

Fiddle

+0

Nice catch - 'L' отличается от' 1' – vol7ron

0

идентификаторы элементов вашего пытаются соответствовать в вашем коде не являются те, в DOM.

// This is what you want to match 
var domID = "#ctl00_cphMainContent_dlProductList_ct100_ctl00_lnkProofDownload" 
                 ^that is an L 
// this what your code is trying to match in its first iteration  
var docID = "#ctl00_cphMainContent_dlProductList_ct10_ctl00_lnkProofDownload";" 
                 ^that is a 1 (one) 

Кроме того, max переменных ваш код должен быть два обугленными числовой строки с ведущими нулями, начиная с нулем, а не целое число, начиная с 10

Лично я бы просто:

// On DomReady... 
$(document).ready(function() { 
    // loop through all anchors that have "lnkProofDownload" in their ID attribute 
    $('a[id*="lnkProofDownload"]').each(function() { 
     // and if the text is set to "Download", change it to "View" 
     if ($(this).text() == "Download") { 
      $(this).text("View"); 
     } 
    }); 
}); 
Смежные вопросы