在jQuery中替换元素

时间:2015-04-10 22:02:07

标签: javascript jquery

我试图以编程方式修改jQuery中的元素,即 docID 中的数字递增到最大数字。我正在将下载上的一系列图片上的文字替换为查看。如果我在代码的#ctl00_cphMainContent_dlProductList_ct100_ctl00_lnkProofDownload部分使用docID而不是$(docID).text(...),则会正确替换文本。当我在其位置使用docID变量时,它无法正常工作。

我在这里做错了什么?

感谢。

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代码。单词Download由View。取代。

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

3 个答案:

答案 0 :(得分:1)

您的代码中看起来有些错误,包括使用1而不是l。如果它应该是100而不是100,那么更像这样的东西会起作用:

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;
        });
    }
});

在这里小提琴:http://jsfiddle.net/ochguL2d/

否则,请告诉我们是否应该将l00作为不同的答案。

答案 1 :(得分:0)

您的a元素位于中间(注意两个&#34; els&#34;):

ctl00_ctl00

...但是你的docID在中间有这个(注意&#34;一个和el&#34;)

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

答案 2 :(得分:0)

您尝试在代码中匹配的元素ID不是DOM中的元素ID。

// 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变量需要是一个两个char数字字符串,前导零从零开始,而不是从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");
        }
    });
});