当您将属性的源设置为子级时,它将为您提供DOM元素,即包括包装HTML而不仅仅是内部文本。
因此,您看到的行为(您可能已经知道)是HTML元素嵌套在其内部。你在把里面的东西包起来<li>
, 它被包裹在<li>
, 可能会被<li>
再次,等等。
那部分我很确定。下面的解决方案是我对如何操作的理解,但还没有完成这种类型的属性选择器,我还没有完全测试它。话虽如此,我认为您所寻找的更接近:
attributes: {
tabs: {
type: \'array\',
source: \'query\',
selector: \'ul.tabs\',
default: [],
query: {
val: {
type: \'string\',
selector: \'li\',
source: \'text\',
},
}
}
因此,我们正在创建一个具有一个属性的对象数组,该属性来自每个子对象的文本。然后在save函数中,您必须特别地
val
我们刚刚指定的属性来自
li
选择器:
save({attributes, className}) {
const { tabs, newTab, content } = attributes;
return (
<div className={className}>
<span className="data-drop" newtab={newTab}></span>
<ul className="tabs">
{tabs.map(tab => {
return <li className="tab">{tab.val}</li>;
})}
</ul>
</div>
);
}