问题
I want to use execCommand('formatblock')
to select a line with the <p>
tag or <span>
with a specific class or id or any CSS style in my contentEditable <div>
(own rich text editor).
document.execCommand('formatblock', false, 'p'>;
How can I add a class or id or CSS in this code?
回答1:
If you want to add id or class for CSS in content editable div, then you will use below code---
<script>
function CssFnctn()
{
document.execCommand('formatblock', false, 'p')
var listId = window.getSelection().focusNode.parentNode;
$(listId).addClass("oder2");
}
</script>
.oder2
{
padding-left: 3em;
}
回答2:
I got the solution.
Javascript:
function line(){
window.execCommand('formatblock', false, 'p');
selectedElement = window.getSelection().focusNode.parentNode;
selectedElement.style.marginBottom = '100px';
}
HTML
<input type="button" value="addMarginBottom" onclick="javascript:line();"/>
<div class="textcontent" contenteditable ="true"></div>
This is work perfectly for me. But i can not make jsfiddle right now. This is work for one line fine but not multiple line.
回答3:
Try this code: http://jsfiddle.net/lotusgodkk/GCu2D/57/
Javascript:
$(document).ready(function () {
$('div').click(function () {
var sel = window.getSelection();
var range = document.createRange();
el = document.getElementById('one'); //Get the element
range.selectNodeContents(el);
sel.removeAllRanges();
sel.addRange(range);
document.execCommand('formatblock', false, null); //execute command.
document.execCommand('bold', false, null); //execute command.
});
});
HTML
<div contenteditable="true">
<p id="one">Sample text</p>
<p>Sample text 2</p>
</div>
回答4:
There are many ways to do it. Just use execCommand 'insertHTML' instead to replace selected text with wrapped code. Like this:
selection = window.getSelection().toString();
wrappedselection = '<span class="accent" style="somestyle">' + selection + '</span>';
document.execCommand('insertHTML', false, wrappedselection);
This will remove breaklines, tags like <b>
, <i>
and other intext-html-formatting - to keep them you need smth like this (thx to post):
selection = window.getSelection().getRangeAt(0).cloneContents();
span = document.createElement('span');
span.appendChild(selection);
wrappedselection = '<span class="accent1">'+span.innerHTML+'</span>';
document.execCommand('insertHTML', false, wrappedselection);
This insertHTML does not works with IE. Check Documentation https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
回答5:
I had the same issue. I ended up using jQuery.
document.execCommand(optionCommand, false, null);
let snippets = $('.js-editor-content-snippet');
let lists = snippets.find('ul, ol');
lists.css({ margin: '0', padding: '0 0 0 20px' });
lists.find('li').css({ margin: '0 0 12px' });
There is also this great library that could be helpful: https://github.com/timdown/rangy/wiki/Class-Applier-Module
rangy.createClassApplier(String theClass[, Object options[, Array tagNames]])
回答6:
To add the class to the p tag, I think it should actually be like this...
function CssFnctn() {
document.execCommand('formatblock', false, 'p')
var listId = window.getSelection().anchorNode.parentNode;
listId.classList = 'oder2';
}
Notice the anchorNode instead of focusNode
来源:https://stackoverflow.com/questions/23380628/how-to-add-class-or-id-or-css-style-in-execcommand-formatblock-p-tag