我正在构建某种框架,可以使用ContentTools编辑页面内容。 ContentTools的要求是regions must be parents。
如果您尝试这样做:
<h1 data-editable data-name="heading">Content</h1>
它无法工作,因为区域必须包含可编辑的块级元素。解决这个问题的方法就是这样包装标签:
<div data-editable data-name="heading">
<h1>Content</h1>
</div>
但我只是想让文本可编辑,所以我自动将内部元素包装在div中。这有效,但它会影响样式。
有没有办法让div'透明',所以它会继承所有样式? 我尝试了以下代码。
要明确:在这个例子中我不写h1 css,所以我对使用哪种样式没有影响。
$("[data-editable]").wrapInner("<div class='innerWrap'></div>");
/* example h1 css, could be anything */
body > h1{
font-size: 40px;
color: red;
font-family: sans-serif;
border: 3px solid green;
background-color: blue;
padding: 5px;
}
.innerWrap{
all: inherit;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 data-editable data-name="heading">Content</h1>
你可以看到一些有用的东西。但是像边界这样的东西会加倍。 无论是否使用innerWrap,它都没有区别。
用css可以做到这一点吗?它必须适用于每个css属性。
答案 0 :(得分:1)
我认为你需要用一个div而不是div来包装h1。
例如。 .wrapInner()
会产生类似
<h1 data-editable="" data-name="heading">
<div class="innerWrap">Content</div>
</h1>
但你想要的是
<div data-editable data-name="heading">
<h1>Content</h1>
</div>
因此,请尝试使用.wrap()
代替.wrapInner()
$("[data-editable]").wrap("<div class='innerWrap'></div>");
h1{
font-size: 40px;
color: red;
font-family: sans-serif;
border: 3px solid green;
background-color: blue;
padding: 5px;
}
.innerWrap{
all: inherit;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 data-editable data-name="heading">Content</h1>
答案 1 :(得分:0)
.innerWrap{
all: inherit; /* remove it*/
}
作为默认行为,如果你没有为&#34; .innerWrap&#34;指定css道具。它看起来只与父母一样
答案 2 :(得分:0)
目前正在开展使单个元素可单独编辑而不是作为集合的一部分(例如在区域中)的功能:https://github.com/GetmeUK/ContentTools/issues/79
然而,您可以尝试使用短期不完美方法,首先更改您的HTML,如下所示:
<h1 data-editable data-name="heading">
<span data-inline data-ce-tag="h1">Content</span>
</h1>
这会使h1
标记为区域,并告诉ContentTools / Edit将内部span
元素视为h1
(文本)元素(感谢data-ce-tag
)。
但接下来的问题是,如果用户点击了返回,您最终会在h1
内找到一个新的段落标记 - 这是我们不想要的。这是data-inline
属性的来源,我们需要监听mount事件,如果挂载的元素具有data-inline
属性,我们将修改它的行为,因此它不能做某些可能产生的事情不良事件:
ContentEdit.Root.get().bind('mount', function(elem) {
// We're only interested in elements that are marked as inline
if (elem.attr('data-inline') === undefined) {
return;
}
// Change the default behaviour of the element
elem.can('drag', false);
elem.can('drop', false);
elem.can('remove', false);
elem.can('spawn', false);
});