Добавить точку надписи в <p> если она выделена динамически?
Обновление: Пример: <p contenteditable="true">Text Text </p>
Возможно ли в этом примере выбрать второе "текстовое" слово в элементе <p>
и нажать кнопку, чтобы добавить точку маркера только к выбранному "слову" динамически?
Возможно ли, в пределах <p contenteditable="true">Text</p>
выделить выделенный текст из элемента <p>
и добавить маркер к выбранному тексту нажатием кнопки динамически?
Если бы обновленная скрипка могла быть предоставлена, это было бы очень оценено, поскольку я все еще новичок в кодировании.
Fiddle
HTML:
<button>
Apply Bullet Point to Selected Text
</button>
<p contenteditable="true">
Text
Text
</p>
<br>
<p contenteditable="true">
Text
Text
</p>
Ответы
Ответ 1
Вы можете сделать это следующим образом, используя jQuery:
function getText() {
if (window.getSelection) {
return window.getSelection().anchorNode.parentNode;
}
return '';
}
$(document).ready(function () {
$('#btnClick').click(function () {
getText().innerHTML = "\u2022" + getText().innerHTML;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btnClick">
Apply Bullet Point to Selected Text
</button>
<p id="text1" contenteditable="true">
Text
Text
</p>
<br>
<p id="text2" contenteditable="true">
Text
Text
</p>
Ответ 2
Да. Возможно. Используя аналогичный пример из этого , вы можете использовать следующие JS. Логика состоит в том, чтобы обернуть выделенный текст с помощью элемента <li>
.
$('button').on("click", function(e) {
var selected = getSelection();
var range = selected.getRangeAt(0);
if (selected.toString().length > 0) {
// Check if parent element has contenteditable attr set to true.
if ($(selected.anchorNode.parentNode).attr('contenteditable')) {
var newNode = document.createElement("li");
range.surroundContents(newNode);
}
}
selected.removeAllRanges();
});
function getSelectedText() {
var selectedText = '';
if (window.getSelection) {
selectedText = window.getSelection();
} else if (document.getSelection) {
selectedText = document.getSelection();
} else if (document.selection) {
// For IE prior to 9 as it does not support document.getSelection().
selectedText = document.selection.createRange().text;
} else return;
return selectedText;
}
См. этот fiddle для рабочего примера.
Edit
Я также обновил код таким образом, что элементы без contenteditable
, установленные в true
, не будут иметь завершенный элемент <li>
.
Обновлен fiddle и код (см. выше). Это должно быть то, что вы хотите.
Ответ 3
вы можете использовать плагин jquery.
$(function(){
$('button').on('click', function(){
$('p').css({'display': 'list-item', 'margin-left':'25px'});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>
Apply Bullet Point to Selected Text
</button>
<p contenteditable="true">
Text
Text
</p>
<br>
<p contenteditable="true">
Text
Text
</p>
Ответ 4
Здесь простое решение будет работать нормально.
$(document).ready(function(){
var lstEl;
$("p").on('focus', function () {
lstEl = $(this);
});
$("button").click(function(){
if(!lstEl.hasClass("bult")){
lstEl.addClass('bult')
}
})
})
.bult{
list-style:disc outside none;
display:list-item;
margin-left:10px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<button>
Apply Bullet Point to Selected Text
</button>
<p contenteditable="true">
Text
Text
</p>
<br>
<p contenteditable="true">
Text
Text
</p>