2015-03-31 66 views
0

我有这个函数是用jQuery编写的,并为选定的元素创建一个div。jQuery函数创建div,在JavaScript中不能正常工作

var createPlaceholder = function createPlaceholder(height) { 
    return $('<div></div>').css({ 
     height: height + 'px', 
     marginTop: (currentIndex > 0 ? -marginTop : -1) + 'px' 
    }) 
    .addClass('placeholder'); 
}; 

然后叫这样的:

placeholderHeight = dragging.outerHeight() + marginTop; 
placeholder = createPlaceholder(placeholderHeight); 
placeholder.insertAfter(dragging); 

现在纯JS的东西!我试图做同样的事情,但没有jQuery,但我总是得到未定义的错误和父母的问题。这是我做了什么至今:

var createPlaceholder = function createPlaceholder(height) { 
    var div = document.createElement('div'); 
     div.style.height = height + 'px'; 
     div.style.marginTop = (currentIndex > 0 ? -marginTop : -1) + 'px'; 
     div.setAttribute('class', 'placeholder'); 

     document.body.appendChild(div); 
    }; 

placeholderHeight = dragging.outerHeight() + marginTop; 
placeholder = createPlaceholder(placeholderHeight); 
placeholder.parentNode.insertBefore(placeholder,dragging.nextSibling); 

试过这样:

placeholderHeight = dragging.outerHeight() + marginTop; 
var div = document.createElement('div'); 
    div.style.height = placeholderHeight + 'px'; 
    div.style.marginTop = (currentIndex > 0 ? -marginTop : -1) + 'px'; 
    div.setAttribute('class', 'placeholder'); 

    div.parentNode.insertBefore(div, dragging[0].nextSibling); 

我得到这个错误:类型错误:无法读取空的特性“的insertBefore”

我在做什么错误? :/

+1

你得到的错误是什么? – 2015-03-31 15:16:53

+0

我得到:无法读取最后一行未定义的属性'parentNode'“placeholder.parentNode.insertBefore(placeholder,dragging.nextSibling);” – Jack 2015-03-31 15:20:53

+2

你的'createPlaceholder'函数没有返回任何东西。 – 2015-03-31 15:21:23

回答

0

嗯,我修改了代码,可在此页面本身进行测试工作状态,因为你没有提供任何游乐场链接或代码的其余部分...所以在这里它是:

var dragging = document.getElementById('question-header'); 


var createPlaceholder = function createPlaceholder(height) { 
    var div = document.createElement('div'); 
    div.style.cssText = 'height:' + height + 'px; margin-top:' + (currentIndex > 0 ? -marginTop : -1) + 'px'; 
    div.className = 'placeholder'; 

    return div; 
}; 

placeholderHeight = dragging.clientHeight + 10; 
placeholder = createPlaceholder(placeholderHeight); 
dragging.parentNode.insertBefore(placeholder,dragging.nextSibling); 
-2

我想,变量(currentIndex/marginTop)在被一个值初始化之前被引用。

+0

不,不是,它们现在在div中正确显示。我用我的最后一次尝试更新了我的问题。 – Jack 2015-03-31 16:17:04

+0

尝试: document.body.insertBefore(div,dragging [0] .nextSibling); – 2015-03-31 16:33:34

+0

document.body.insertBefore(div,dragging.nextSibling); – 2015-03-31 16:44:00