html jquery函数不起作用但是替换了

时间:2012-06-27 10:32:02

标签: jquery html replacewith

我真的很奇怪。我有这个代码(我删除不相关的代码)。

$(function() {
        function get_translations() {
            $('#translations tr').not(':eq(0)').remove();
            var item = {
                context: "1: context",
                term: "2: term",
                translation: "3: translation"
            };  

            var tr = $('<tr/>').
                append('<td class="context">' + (item.context || '&nbsp;') + '</td>').
                append('<td class="original-string">' + item.term + '</td>').
                append('<td class="translation translated-string">' + item.translation +
                       '</td>').
                append('<td class="delete-col"><button class="'+
                       'delete translation-delete">X</button></td>').
                data('term', item.term || '').
                data('translation', item.translation || '').
                data('context', item.context || '').
                appendTo('#translations');
        }
        get_translations();

       $('td.translation').live('click', function() {
           var $this = $(this);
           if ($this.find('textarea').length == 0) {
               var text = $this.empty().parent().data('translation');
               //$this.data('content', text).empty();
               $this.html('<tex' + 'tarea>' + text + '</text' +
                 'area><button>Save</button><a href="#" class="_cancel">Cancel</a>');
               //appendTo($this);
           }
       });
       $('td.translation button').live('click', function() {
           var td = $(this).parent();
           var tr = td.parent();
           console.log(td);
           td.html('foo');
           //td.replaceWith('<td class="translation translated-string">foo</td>');
       });
});
$('td.translation button')处理程序td.html('foo');中的

不起作用,但td.replaceWith('<td class="translation translated-string">foo</td>');起作用。没有错误,它什么都不做。

我尝试使用以下方法重新创建此行为:

$(function() {
    $('table').append('<tr><td>:empty</td></tr>');
    $('td').live('click', function() {
        var tr = $(this).parent();
        $(this).html('<textarea></textarea><a class="foo" href="#">a:</a>');
    });
    $('.foo').live('click', function() {
        var td = $(this).parent();
        var tr = td.parent();
        td.html(':empty');
        return false;
    });
});

但在代码工作之上。

我可以使用replaceWith,但我知道为什么html函数不起作用。有谁知道为什么?

更新:当我添加此window.td = td;时,我可以从控制台调用html并运行。

2 个答案:

答案 0 :(得分:1)

在此处查看演示,并使用http://jsfiddle.net/QknuZ/2/(使用td.html()

观看提醒

我希望这能回答你的问题:HTML html()将替换元素的内容,而replaceWith()将替换实际的元素。

http://api.jquery.com/html/

http://api.jquery.com/replaceWith/

replaceWith从DOM中删除元素,然后再次添加html。

如果我错了,请纠正我,希望这有帮助。

图片

enter image description here

答案 1 :(得分:0)

使用来自@Tats_innit的提示我将alert('call')添加到$('td.translation').live('click'并在单击按钮时执行。首先执行按钮处理程序(它更改html和警告消息框),然后调用td的处理程序并再次创建textarea。