jQuery 创建 div 的函数,在 JavaScript 中重写无效

jQuery function which creates div, rewritten in JavaScript not working

我有这个函数,它是用 jQuery 编写的,并为选定的元素创建一个 div。

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' of null

我做错了什么? :/

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

好吧,我将您的代码修改为可以在此页面上测试的工作条件,因为您没有提供任何游乐场 link 或代码的其余部分...所以在这里:

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);