慕森卡
2022-06-05 15:50:06
我正在為我的一個項目編寫一個基于瀏覽器的文本編輯器。每個文本都有一個標(biāo)題,用戶可以對其進(jìn)行編輯。用戶不應(yīng)該能夠格式化該標(biāo)題或向其添加任何 html,它應(yīng)該只是一個純字符串。一個<input type="text">元素是理想的,但由于標(biāo)題可能很長,我需要換行,據(jù)我所知,這是輸入標(biāo)簽無法做到的。我可以使用<textarea>,但這將允許用戶手動添加換行符,這是我不想要的。我可以使用<p contenteditable="true">,但這會添加不需要的標(biāo)記,并且用戶將能夠插入手動換行符和其他標(biāo)記。我可以編寫一大堆 JavaScript 來驗證和限制<textarea>orcontenteditable標(biāo)記,但這似乎很容易出錯并且可能會引入跨瀏覽器的不一致。還是我讓這種方式過于復(fù)雜,并且有一種簡單的方法可以防止誤用?我相信人們以前已經(jīng)解決了這個問題。我在這里想念什么?我真的需要一個非常復(fù)雜的 JavaScript 解決方案來獲得可換行的單行文本輸入嗎?順便說一句,我使用tiptap作為我的編輯器組件。我知道它可以進(jìn)行標(biāo)題輸入,但到目前為止我還沒有弄清楚如何提取該標(biāo)題。我希望它與文本分開存儲,而不是作為文本的一部分。如果有人對使用tiptap 解決我的問題有意見,那也可以作為答案——盡管我認(rèn)為使用成熟的富文本編輯器來制作簡單的、未格式化的單行代碼有點(diǎn)過頭了。我更喜歡更輕量級的解決方案。
1 回答

守著一只汪
TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊
這里有兩個簡單的解決方案:
在客戶端禁用 Enter 鍵
document.querySelector('#textInput').addEventListener('keydown',
function(event) {
var keyCode = event.keyCode || event.which;
// If ENTER key
if (keyCode === 13) {
event.preventDefault(); // do nothing
}
}
);
<html>
<body>
<textarea id="textInput" rows=3></textarea>
</body>
</html>
刪除服務(wù)器端的換行符
let text = inputText.replace(/\n/, '');
或者用空格替換它們,然后用一個替換雙空格
let text = inputText.replace(/(\r\n|\n|\r)/gm, ' ').replace(/\s+/g, ' ');
使用這兩種解決方案比只使用一種解決方案要好。
添加回答
舉報
0/150
提交
取消