如果像'price 0€'这样的字符串替换innerHTML

时间:2013-11-09 15:47:54

标签: javascript jquery regex

我正在尝试使用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";
    }
}); 

刷新页面时没有返回任何内容。

3 个答案:

答案 0 :(得分:2)

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

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

Demonstration

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

$(function(){
    if ($('#price').text().trim()==="0") $('#price').text('free');
}); 

答案 1 :(得分: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");
    }
}); 

我无法确定您的正则表达式是否正确。您尚未给出跨度内容的具体示例输入。

答案 2 :(得分: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)来设置值。