2012-11-22 143 views
0

我有一些元素与一些数据。我需要为它创造变化的领域。所以我使用textarea来改变这个元素中的文字。一切工作正常,但是当我想添加condtion与文本langht东西是不正确的......这是我的代码和一些小提琴(http://jsfiddle.net/qzzKA/)。 THX的帮助......如何用jQuery替换文本元素中的文本

<div class="textchange_box"> 
    <span class="desc">data<br>data 
    </span> 
    <textarea name="desc" class="textfield"></textarea> 
    <span class="change">change</span> 
    <span class="save">save</span> 
</div>​ 

和jQuery:

$(".change").live('click', function() { 
    $(this).prev('.textfield').css('display','block'); 
    $(this).prevAll('.desc').css('display','none'); 
    $(this).next('.save').css('display','block'); 
    $(this).css('display','none'); 
}); 
$(".save").live('click', function() { 
    var default_value = $(this).prev('.desc').text().replace(/\r\n|\r|\n/g,"<br/>"); 
    var actual_value = $(this).prev('.textfield').text().replace(/\r\n|\r|\n/g,"<br />"); 
    $(this).prevAll('.textfield').css('display','none'); 
    $(this).prev('.change').css('display','block'); 
    $(this).css('display','none'); 
    if (actual_value.length < 0) { 
     $(this).prev('.desc').replaceWith('<span class="desc">' + default_value +'</span>'); 
    } 
    else if (actual_value.length > 0) { 
     $(this).prev('.desc').replaceWith('<span class="desc">' + actual_value +'</span>'); 
    } 
}); 
+0

您是否尝试过使用'.VAL()''代替的.text()'? –

+0

与您的问题没有关系,但请注意,使用跨度作为链接是可访问性失败,因为它们不适用于不使用鼠标或不能使用鼠标或其他指针设备的用户。 – nnnnnn

+0

thx我会改变它,但现在我需要解决这个问题... – Lukas

回答

3

替换您如下一行:

if (actual_value.length < 0) { 

这一个:

if (actual_value.length <= 0) { 

因为当一个字符串是空的它的长度是零不是一个ne数字。

UPDATE:
您有其他错误,您的以下两行:

var default_value = $(this).prev('.desc').text().replace(/\r\n|\r|\n/g,"<br/>"); 
var actual_value = $(this).prev('.textfield').text().replace(/\r\n|\r|\n/g,"<br />"); 

应该是这样的:

var default_value = $(this).prevAll('.desc').text().replace(/\r\n|\r|\n/g,"<br/>"); 
var actual_value = $(this).prevAll('.textfield').val().replace(/\r\n|\r|\n/g,"<br />"); 

因此,使用prevAll()代替prev()和textarea的使用val()而不是text()

你也需要在这里使用prevAll()

$(this).prev('.desc').replaceWith('<span class="desc">' + actual_value +'</span>'); 

所以这将是:

$(this).prevAll('.desc').replaceWith('<span class="desc">' + actual_value +'</span>'); 

working fiddle

基本上是最常见的错误是你认为.prev()会遍历所有以前的兄弟姐妹,而你必须使用prevAll()

+0

甚至'=== 0',因为它不能是负面的。 – nnnnnn

+0

这不会改变任何东西 – Lukas

+0

我更深入地看着你的小提琴,并抓住一些更多的错误,我已经与他们更新了我的答案,并张贴了一个工作小提琴,检查出来:-) – Nelson