我有创建动态html的jScript,它的调用方式如下:
var wrapper = document.createElement('div');
wrapper.innerHTML = 'blah blah blah';
jQuery( $(document.currentScript).parent()[0].tagName
+ '#'
+ $(document.currentScript).parent()[0].id
).append(wrapper);
此脚本需要能够放置在任何类型的DOM元素中。
在myJavascript.js内部,我们目前有以下内容:
<div id=''><!--this wont work because there is no div id defined-->
<script type='text/javascript'
data-parm-one = 'foo'
data-parm-two = 'bar'
src='/dirOne/myJavascript.js'>
</script>
</div>
,这会将包装器附加到父元素。
这有效,但请注意我必须为父元素分配一个任意的id,在这种情况下我称之为 thisNeedsToBeHere 。如果没有ID,它就无法工作。
{{1}}
我尝试的第一件事是使用 $(this).append(wrapper)但是收到了这条消息:
未捕获的TypeError:无法读取属性&#39; createDocumentFragment&#39;未定义的
有没有更好的方法将html附加到我们可能没有ID的父元素?
答案 0 :(得分:3)
看起来你过度完成了这个。您不需要构造CSS选择器来选择父元素parentNode.tagName + '#' + parentNode.id
,因为您已经有一个parent()
可用:
var wrapper = document.createElement('div');
wrapper.innerHTML = 'blah blah blah';
$(document.currentScript).parent().append(wrapper);
实际上,你甚至不需要担心选择要追加的父元素,使用jQuery你可以使用after
方法:
$(document.currentScript).after(wrapper);