0

我做了一个函数,如果 p 元素没有任何内容或内部有 br,则在 contenteditable 离开时应该删除它。问题是它在 .blur() 时删除了一个有内容的 li !?我要疯了,因为我确定它在 10 分钟前就起作用了…………

这是功能:

$('p').live('blur', function() {
localStorage.setItem('todo', listan.innerHTML);
color();

if ($(this).html() == "" || "<br>")
{
  console.log($(this).html());
  $(this).parent().remove();
  localStorage.setItem('todo', listan.innerHTML);
}
}); 

列表(“listan”)如下所示:

<ul ID="listan">
      <li><p contenteditable="true" class="thing">something</p><input type="button" value="ta bort" class="delete"></li>  
</ul>
4

4 回答 4

3

从代码中删除.parent(),因为“模糊”的父元素pli. 还要检查你的 if 语句。

$('p').live('blur', function() {
    localStorage.setItem('todo', listan.innerHTML);
    color();

    var html = $(this).html();
    if (html == "" || html == "<br>") {
        console.log($(this).html());
        $(this).remove();
        localStorage.setItem('todo', listan.innerHTML);
    }
});​
于 2012-05-13T23:54:21.723 回答
1
if( $(this).html() == "" || "<br>")

这行的意思是“如果 html 是空的,或者<br>是什么”。

所以它总是正确的,所以无论内容是什么,它都会被删除。

试试这个:

if( $(this).html().replace(/\s|<br ?\/?>/) == "")

这将去除空格(最重要的是前导和尾随)和换行符,并查看结果是否为空。

于 2012-05-13T23:55:22.300 回答
1
var html = $(this).html();
if (html == "" || html == "<br>") {....do stuff....}
于 2012-05-13T23:56:36.230 回答
0

为什么不使用 CSS?

p:empty {
    display: none 
}
于 2012-05-14T00:12:49.470 回答