0

我正在尝试使用 jQuery 替换 span id="price" 的 innerHTML。我认为我在使用 RegExp 时做错了。

$(function(){

    var element = $('#price');
    var contenu = element.innerHTML;
    var str = " 0 ";
    var re = new RegExp("^.*"+str+".*","gi"); 

    if (contenu.match(re)){    
        element.innerHTML="free";
    }
}); 

当我刷新页面时它什么也不返回。

4

3 回答 3

2

如果您尝试更改包含字符串的元素的内容" 0 ",那么您可以简单地做

$(function(){
    $('#price:contains(" 0 ")').html('free');
}); 

示范

如果您只想在“0”是整个内容时更改它,请执行以下操作:

$(function(){
    if ($('#price').text().trim()==="0") $('#price').text('free');
}); 
于 2013-11-09T15:50:27.260 回答
0

这个:

var element = $('#price');

会给你一个 jQuery 数组,而不是 DOM 元素。它没有像innerHTML. 您需要获取实际的 DOM 元素。

在继续之前尝试此操作:

var element = $('#price')[0];

或者,重新编写代码以使用 jQuery 结果:

$(function(){

    var element = $('#price');
    var contenu = element.html();
    var str = " 0 ";
    var re = new RegExp("^.*"+str+".*","gi"); 

    if (contenu.match(re)){    
        element.html("free");
    }
}); 

我不能确定你的正则表达式是否正确。您还没有给出跨度内容的具体示例输入。

于 2013-11-09T15:55:14.713 回答
0

我想你想要:

$(function(){
  var element = $('#price');
  var contenu = element.html();
  var str = " 0 ";
  var re = new RegExp("^.*"+str+".*","gi"); 

  if (contenu.match(re)){    
    element.html("free");
  }
});

jQuery 不返回简单的 DOM 元素。相反,它返回一个包含与您选择器匹配的每个 DO 元素的数组,该选择器包装在一个 jQuery 包装器中,因此不能简单地使用像 innerHTML 这样的 DOM 属性。如果您希望与选择器“#price”匹配的第一个元素作为原始 DOM 元素,那么您可以使用$('#price')[0] ,然后$('#price')[0].innerHTML将按预期工作。或者,您可以接受 jQuery 哲学并使用它$('#price').html()来获取值或$('#price').html(value)设置值。

于 2013-11-09T16:11:57.333 回答