代码之家  ›  专栏  ›  技术社区  ›  Reigel Gallarde

这是虫子吗?请检查一下

  •  7
  • Reigel Gallarde  · 技术社区  · 15 年前

    html格式

    <div contentEditable="true">testing....</div>
    

    jQuery查询

    $(document).ready(function(){
       $('[contenteditable]').removeAttr('contenteditable');
    });
    

    here .

    现在,试试这个

    $('[contentEditable]').removeAttr('contentEditable'); 
    // notice the CamelCase of the string contentEditable
    

    在FF3.6中,它在控制台上给出了一个错误

    输入了无效或非法的字符串 指定“代码:”12
    元素[名称] =值;

    我怀疑它是jQuery选择器,但事实并非如此。经进一步调查,这是该案的论点 .removeAttr('contentEditable'); CLass 作为属性和do .removeAttr('CLass'); . 不过,这样做不会出错。

    那么,为什么呢 contentEditable 是不是给了我那个错误?


    更新

    从Kobi看来,它实际上接受任何一个案子除了, (我也试过)。

    CamelCase

    4 回复  |  直到 15 年前
        1
  •  2
  •   Kobi    15 年前

    这不是关于小写字母,而是关于 精确套管 . 任何其他套管 contentEditable 工作,例如: removeAttr('ConTentEditable'); .
    我找不到问题的确切来源,我猜是火狐限制。

    似乎是jQuery sets the attribute to an empty string 在删除它之前,这是导致错误的原因。这似乎效果更好:

    $('[contentEditable]').attr('contentEditable', false);
    
        2
  •  2
  •   Andy E    15 年前

    removeAttr 属性 函数,指向 jQuery.attr() 设置属性的值。将属性设置为 "" ,然后尝试将其删除。的代码 attr() 首先使用 in

    // If applicable, access the attribute via the DOM 0 way
    if ( name in elem && notxml && !special ) {
    

    (来自jQuery 1.4,第1452-1453行)

    elem.setAttribute() ,这就是问题的具体原因。对于任何其他情况, name in elem setAttribute()

    看起来Firefox在将属性设置为空字符串方面有问题,除非你在其他浏览器中也有同样的问题。您可以尝试在jQuery站点或MDC上提交一个bug。

        4
  •  0
  •   Tim Down    15 年前

    contentEditable (不是属性,因为那不是 attr() 和朋友通常处理)需要一个字符串值,即“true”、“false”和“inherit”之一。我不会用jQuery关闭 内容可编辑 ,但我认为以下方法可行:

    $('[contenteditable]').attr("contentEditable", "false");
    

    或者您可以绕过jQuery来设置实际的 内容可编辑

    $('[contenteditable]').each(function() {
        this.contentEditable = "false";
    });