Javascript 未将字符串文字追加到DOM
我正试图使函数以字符串的形式返回HTML元素,以便最终将它们附加到DOM中,并在函数中传递它们。我有段落,标题,和div的工作,但不能为我的生活似乎得到工作的链接 这是非工作状态 所讨论的javascript是:Javascript 未将字符串文字追加到DOM,javascript,jquery,dom,Javascript,Jquery,Dom,我正试图使函数以字符串的形式返回HTML元素,以便最终将它们附加到DOM中,并在函数中传递它们。我有段落,标题,和div的工作,但不能为我的生活似乎得到工作的链接 这是非工作状态 所讨论的javascript是: function link(href,text,css){ let target = `<a href="#"></a>`; if(css == null ){ return target; } return a
function link(href,text,css){
let target = `<a href="#"></a>`;
if(css == null ){
return target;
}
return addStyles(target,css);
}
这在很长一段时间内给了我错误,但仅当从链接调用它时。我试着在href中硬编码,看看是否我的字符串文本给了我错误,但仍然没有用
从这个函数调用它时,它工作得非常好
function createDiv(css){
let newDiv = $(div);
return addStyles(newDiv,css);
}
我说addStyles函数可以工作,我认为是link()
给我带来了问题,因为createDiv可以工作,并用这些调用附加DOM
app.append(createDiv({id: 'testing'}));
app.append(createDiv({class: ['bar', 'snuff']}));
app.append(createDiv()).append(createDiv({class: 'timi'})).append(paragraph('Hey guys!'));
$('#testing').append(heading(1,'Hello'));
createDiv
函数按预期工作,而link
函数不能按预期工作的原因是,您没有像在createDiv
函数中那样将html元素的表示形式(传递给addStyles
)包装在jQuery包装器中。请参阅下面的代码,了解我为使其正常工作所做的更改:
function link(href,text,css){
let target = `<a href="${href}">${text}</a>`;
if(css == null ){
return target;
}
return addStyles($(target)[0],css);
}
函数链接(href、文本、css){
让target=`;
if(css==null){
回报目标;
}
返回addStyles($(目标)[0],css);
}
实际上,我有点不明白为什么我们需要将[0]
添加到$(目标)
,但我们确实需要。也许其他人可以插话解释为什么
是这样,而
编辑:忽略上面关于[0]
的内容,并查看对此答案的评论。您的让目标=代码>是一个字符串。您应该使用DOM并操作其属性
function link(href,text,css){
let target = document.createElement('a');
let linkText = document.createTextNode(text);
target.appendChild(linkText);
target.href = href;
if(css == null ){
return target;
}
return addStyles(target,css);
}
您忘了用bling标记a标签:
let target = $(`<a href="#"></a>`);
let target=$(```);
更简单;看看我的答案。您不需要$(target)上的[0]。哦,这也行。也许我也不需要。但是如果我没有这样做,codepen会给我这个错误:Log Skipped:对不起,这个日志对于我们的控制台来说太大了。您可能需要改用浏览器控制台。
这是因为以前,它只是在console.log中输出一个字符串;现在它正试图输出一个对象。Codepen的嵌入式控制台不支持这一点。我建议您始终使用浏览器控制台,对于通过谷歌搜索CodePen错误消息得到这些评论的人来说,这会更好(甚至是IE):在Firefox中,确保查看Web控制台(Ctrl+Shift+K),而不是浏览器控制台(Ctrl+Shift+J).我认为回到vanilla JS并使用其该死的createElement将是最好的选择。我想是时候重新阅读这些文档了……这样做的唯一原因是您基本上错过了jQuery的“createElement”等价物,如我的回答所示,将其包装在bling中。该死。在这里,我建议您继续使用jQuery。我的价值观在哪里?@Mjohnsenger这是你们之间的艰难抉择。你回答了我的问题,但基罗解决了一个更大的问题。老实说,如果我能查一下你们两个,我会的!
let target = $(`<a href="#"></a>`);