创建div元素时出现奇怪的Javascript / JQuery行为

时间:2014-03-27 06:55:00

标签: javascript jquery css dom

    menuPaneToBe.title = document.createElement("div");
    $(menuPaneToBe).append(menuPaneToBe.title);
    console.log(1)
    console.log(menuPaneToBe.title)
    $(menuPaneToBe.title).addClass("menuTitle");
    console.log(2)
    $(menuPaneToBe.title).html("Title"); //Just placeholders, gets changed by circular-view
    console.log(3)

控制台

1 MenuPane.js:12
[object HTMLDivElement] MenuPane.js:13
Uncaught Error: Syntax error, unrecognized expression: [object HTMLDivElement] jquery-1.11.0.min.js:2

为什么标题只是[对象HTMLDivElement]而不是正确的对象?为什么我不能上课? MenuPaneToBe是一个自定义标签,设置为显示块。

<menu-pane id="menu"></menu-pane>

menu-pane {
    display: block;
    height: 100%;
    width: 30%;
    border-left: 1px solid black;
}

1 个答案:

答案 0 :(得分:1)

这是一个奇怪的问题,如果menuPaneToBe指的是dom元素(不是jQuery对象),那么title属性将引用元素的title属性,它是一个字符串值。至少在Google Chrome中,当您为元素的标题指定值时,它会将其转换为字符串对象。

因此,当您说menuPaneToBe.title = document.createElement("div")时,它会将字符串值[object HTMLDivElement]分配给menuPaneToBe.title,这是一个无效的jQuery选择器。

然后,当你说$(menuPaneToBe.title)时,它会抛出上述错误。

演示:Fiddle

只需将属性名称从title更改为其他内容,例如title2

var menuPaneToBe = $('#menu')[0];
menuPaneToBe.title2 = document.createElement("div");
$(menuPaneToBe).append(menuPaneToBe.title2);
console.log(1)
console.log(menuPaneToBe.title2)
$(menuPaneToBe.title2).addClass("menuTitle");
console.log(2)
$(menuPaneToBe.title2).html("Title"); //Just placeholders, gets changed by circular-view
console.log(3)

演示:Fiddle