Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未将字符串文字追加到DOM_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 未将字符串文字追加到DOM

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

我正试图使函数以字符串的形式返回HTML元素,以便最终将它们附加到DOM中,并在函数中传递它们。我有段落,标题,和div的工作,但不能为我的生活似乎得到工作的链接

这是非工作状态

所讨论的javascript是:

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