Javascript contentEditable和lastChild IE、Firefox和;最后一个孩子

Javascript contentEditable和lastChild IE、Firefox和;最后一个孩子,javascript,ajax,google-chrome,internet-explorer,firefox,Javascript,Ajax,Google Chrome,Internet Explorer,Firefox,很抱歉问了这么长的问题,但我做了很多尝试,做了一些研究,却没有找到很多解决办法。我有一个内容可编辑的div <div contentEditable=true onkeyup='showResult(this.lastChild.textContent)'></div> 为什么这三种浏览器的表现完全不同?我如何让它们都表现得像Chrome一样是否有更好的方法获取不在跨距中的文本? 我在另一个答案上读到,firefox喜欢输入,IE喜欢在这种情况下中断,但这两者似乎都

很抱歉问了这么长的问题,但我做了很多尝试,做了一些研究,却没有找到很多解决办法。我有一个内容可编辑的div

  <div contentEditable=true onkeyup='showResult(this.lastChild.textContent)'></div>
为什么这三种浏览器的表现完全不同?我如何让它们都表现得像Chrome一样是否有更好的方法获取不在跨距中的文本?

我在另一个答案上读到,firefox喜欢输入,IE喜欢在这种情况下中断,但这两者似乎都不适合我-(

好的解决方案的一大障碍是jQuery在大约第6行之后停止工作,这也让我完全困惑。如果有人能解释为什么它不工作,那也太酷了。也许与它有关的是一个ajax查询和jQuery加载后创建的内容


感谢您的帮助!

因此,尽管我没有收到任何回复,但我想出了一个解决办法。但是,lastChild在三种浏览器之间的行为仍然不同,因此希望您能提供进一步的帮助

答案是在document ready部分中有一个函数,它克隆了原始div,去掉了它的子项,并使用Jquery抓取key up上的文本。然后将结果传递给showResult函数,如下所示:

 $('#FakeInput').keyup(function(){
 var ThisClone =  $('#FakeInput').clone()
     .children()
       .remove()
       .end()
       .text();
  showResult(ThisClone);

  });
同样,在用户进行选择时,我没有尝试从div中删除用户键入的文本,而是使用它们的类克隆了span中的项,然后清空div的内容并重新结束这些克隆的div

var TagItems = $('.TagItems').clone();
$('#FakeInput').empty();
$('#FakeInput').append(TagItems);

这个解决方案适用于三种浏览器。

我在IE团队工作,对这个问题很感兴趣,所以我找了一把小提琴来进一步研究这三种主要的方法。你可能会感兴趣。我没有立即看到说明浏览器应该采取哪种方法的规范,但看起来IE和Chrome确实很有说服力麦角。
$('body').on("click", '.TagHints', function(){
//Once you click on the suggestion
var ThisData = $(this).data("id");
var ThisId = $(this).attr("id");
var ThisTag = $(this).data("tag");

//delete the text that the user typed in
elementToRemove = document.getElementById("FakeInput").lastChild;
document.getElementById("FakeInput").removeChild(elementToRemove);

var TagDiv = document.createElement('span');
TagDiv.className = 'SpanClass';
TagDiv.id = ThisId;
TagDiv.innerHTML = ThisTag;
TagDiv.contentEditable=false;

//append the Span to the contentEditable div
document.getElementById("FakeInput").appendChild(TagDiv);

var TagHints = document.getElementsByClassName("TagHints");
    while(TagHints.length > 0){
    TagHints[0].parentNode.removeChild(TagHints[0]);
    }

});
 $('#FakeInput').keyup(function(){
 var ThisClone =  $('#FakeInput').clone()
     .children()
       .remove()
       .end()
       .text();
  showResult(ThisClone);

  });
var TagItems = $('.TagItems').clone();
$('#FakeInput').empty();
$('#FakeInput').append(TagItems);