我有一些带有一些数据的元素。我需要为它创建更改字段。所以我使用textarea来改变这个元素中的文本。一切都很好,但是当我想用文本添加condtion时,某些东西工作正常......这是我的代码和一些小提琴(http://jsfiddle.net/qzzKA/)。求救......
<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 :(得分:3)
替换以下行:
if (actual_value.length < 0) {
这个:
if (actual_value.length <= 0) {
因为当字符串为空时,其长度为零而不是负数。
<强>更新强>
您有其他错误,您的以下两行:
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()
并使用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()