我试图创建将HTML元素作为字符串返回给我的函数,这样我最终可以将它们附加到DOM并将它们传递给我的函数。我有段落,标题和div工作,但不能为我的生活似乎得到工作的链接。
这是不起作用的codepen
有问题的javascript是:
function link(href,text,css){
let target = `<a href="#"></a>`;
if(css == null ){
return target;
}
return addStyles(target,css);
}
我的addStyles功能是:
function addStyles(target,css){
if(css == null ){
return target;
}
let props = Object.keys(css);
props.forEach((prop)=>{
switch(prop){
case 'id':
$(target).attr('id', css[prop]);
break;
case 'class':
let classes = css[prop];
if(Array.isArray(css[prop])){
classes = css[prop].toString().replace(',', ' ');
}
$(target).addClass(classes);
break;
default:
$(target).attr('data-name', 'Timi');
}
});
return target;
}
很长一段时间给了我错误,但只有从link
函数调用它时才会出错。我试着在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'));
答案 0 :(得分:2)
您的[0]
是一个字符串。你应该使用DOM并操纵它的属性
let target = <a href="#"></a>;
答案 1 :(得分:1)
你忘了用bling包装一个标签:
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);
}
答案 2 :(得分:0)
您的createDiv
函数按预期工作并且您的link
函数不是因为您没有包装html元素的表示形式(您传递给{{1}的元素)的原因}}在jQuery包装器中,就像在addStyles
函数中一样。请参阅下面的代码,了解我为改变它而工作的内容:
createDiv
我实际上有点迷失为什么我们需要将function link(href,text,css){
let target = `<a href="${href}">${text}</a>`;
if(css == null ){
return target;
}
return addStyles($(target)[0],css);
}
添加到[0]
,但我们确实如此。也许其他人可以说明为什么$(target)
而不是<a href="${href}">${text}</a>
修改:忽略上述<div></div>
,并查看对此答案的评论。