当前位置: 首页 > 面试题库 >

Firefox中的jQuery html()(使用.innerHTML)忽略DOM更改

梁丘书
2023-03-14
问题内容

我真的很惊讶,我之前从未遇到过这个问题,但是似乎在元素上调用jQueries
.html()函数会忽略DOM中的更改,即它会返回原始源中的HTML。IE不会这样做。jQueries .html()仅在内部使用innerHTML属性。

这是要发生吗?我使用的是Firefox 3.5.2。我在下面有一个示例,无论您将文本框的值更改为什么,“
container”元素的innerHTML都只会返回HTML标记中定义的值。该示例并没有使用jQuery只是为了使其更简单(使用jQuery的结果是相同的)。

有谁能解决我可以在哪个位置获取容器html的当前状态,即包括对DOM的任何脚本化更改?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <script type="text/javascript">
            <!--
            function BodyLoad(){                
                document.getElementById("textbox").value = "initial UPDATE";
                DisplayTextBoxValue();
            }

            function DisplayTextBoxValue(){
                alert(document.getElementById("container").innerHTML);             
                return false;
            }
            //-->
        </script>
    </head>
    <body onload="BodyLoad();">
        <div id="container">
            <input type="text" id="textbox" value="initial" />
        </div>
        <input type="button" id="button" value="Test me" onclick="return DisplayTextBoxValue();" />
    </body>
</html>

问题答案:

Firefox不会根据用户输入来更新DOM对象的value 属性 ,而只是基于其value 属性 -存在非常快速的解决方法。

DOM:

function DisplayTextBoxValue(){
  var element = document.getElementById('textbox');
  // set the attribute on the DOM Element by hand - will update the innerHTML
  element.setAttribute('value', element.value);
  alert(document.getElementById("container").innerHTML);             
  return false;
}

.formhtml()自动执行此操作的jQuery插件:

(function($) {
  var oldHTML = $.fn.html;

  $.fn.formhtml = function() {
    if (arguments.length) return oldHTML.apply(this,arguments);
    $("input,button", this).each(function() {
      this.setAttribute('value',this.value);
    });
    $("textarea", this).each(function() {
      // updated - thanks Raja & Dr. Fred!
      $(this).text(this.value);
    });
    $("input:radio,input:checkbox", this).each(function() {
      // im not really even sure you need to do this for "checked"
      // but what the heck, better safe than sorry
      if (this.checked) this.setAttribute('checked', 'checked');
      else this.removeAttribute('checked');
    });
    $("option", this).each(function() {
      // also not sure, but, better safe...
      if (this.selected) this.setAttribute('selected', 'selected');
      else this.removeAttribute('selected');
    });
    return oldHTML.apply(this);
  };

  //optional to override real .html() if you want
  // $.fn.html = $.fn.formhtml;
})(jQuery);


 类似资料:
  • 问题内容: 当与CSS属性结合使用时,Firefox缺少元素底部的填充。(但可在Chrome和Safari中使用。) 我错过了一些东西吗,或者有什么办法可以解决这个问题? 注意:该演示没有使用任何库进行规范化,但是我也尝试过,但是没有成功。 问题答案: 修改后的CSS

  • 作为开发人员,我使用以下endpoint:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate 并要求:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AppendCells

  • 问题内容: 我正在研究一个jQuery主题,其中包括对尽可能多的表单元素进行样式化。最初,它是为Webkit(Chrome)开发的。现在,我也想使其与Firefox一起使用。 问题是;Firefox在某些特定于Webkit的语法上存在问题。 例如: 问题是位。删除它,Firefox运行正常。它也做到这一点对于其他类似语法,并使用所有其他的事情标签。它可以识别出自己的标签,虽然很好。 Webkit似

  • 问题内容: 我正在尝试向元素内的display:flex元素添加填充。如果将填充定义为百分比,则在Firefox中不会显示填充,尽管在中定义时会显示px。两种情况在Chrome中都可以正常工作。 问题答案: 网格/弹性百分比 该小组试图研究如何定义垂直百分比边距和填充。注意:传统上,CSS的顶部和底部页边距是针对包含块的宽度而不是其高度进行解析的,这具有一些有用的效果,但通常令人惊讶。现有的布局模

  • 我在Firefox 34及以上版本中发现了一个与显示行为有关的错误: flex。 我可以确认代码在所有现代浏览器中都一直有效,现在仍然有效,但是Firefox34和最近的Firefox35测试版的行为完全不一致。 我制作了一把小提琴,展示了不同的行为:http://jsfiddle.net/ntkawu63/ 在Firefox34中启动它,它将忽略图像上的最大宽度:100%。在任何其他浏览器中,包

  • 问题内容: 我有一堂课,里面也有变量。有时我想忽略某些字段,有时在反序列化时不想忽略(也许也在序列化时)。在Jackson怎么办? 问题答案: 对于序列化,“ 过滤属性 ”博客条目应该会有所帮助。反序列化方面的支持较少,因为更常见的是要过滤掉所写的内容。 一种可能的方法是子类化,重写使方法(和/或字段)具有可忽略性的方法,以使用所需的任何逻辑。 如果您举了一个实际应用的例子,这也可能会有所帮助,即