我只是 Javascript 的初学者 :)
我希望能够接收文本块中的所有段落(意味着所有部分用<br/ >
标签相互分隔),因此我可以根据语言(ltr 与 rtl)对每个这样的段落应用不同的对齐设置。
例如,如果我有以下文本:
Hello<br/>שלום
我希望“Hello”与左侧对齐,而“שלום”与右侧对齐。有没有可能以document.evaluate
某种方式使用?
我只是 Javascript 的初学者 :)
我希望能够接收文本块中的所有段落(意味着所有部分用<br/ >
标签相互分隔),因此我可以根据语言(ltr 与 rtl)对每个这样的段落应用不同的对齐设置。
例如,如果我有以下文本:
Hello<br/>שלום
我希望“Hello”与左侧对齐,而“שלום”与右侧对齐。有没有可能以document.evaluate
某种方式使用?
假设你有一个 DOM 子树,你可以深度优先地遍历它,寻找文本节点和 BR 元素。
var subtree = document.createElement('DIV');
subtree.innerHTML = 'Hello<br/>שלום';
var paragraphs = [""];
function walkSplittingOnBR(node) {
switch (node.nodeType) {
case 1:
if (node.nodeName === 'BR') { paragraphs.push(''); }
break;
case 3:
paragraphs[paragraphs.length - 1] += node.nodeValue;
}
for (var child = node.firstChild; child; child = child.nextSibling) {
walkSplittingOnBR(child);
}
}
walkSplittingOnBR(subtree);
离开。["Hello","שלום"]
_paragraphs
我希望“Hello”与左侧对齐,而“שלום”与右侧对齐。
你有三个选择。
<span dir="rtl">שלום</div>
闪米特语系中的大多数从右到左的脚本。<span style="direction:rtl">שלום</span>
ClosuredetectRtlDirectionality
启发式地检测 RTL 文本。
使用document.getElementsByTagName("p")
. 为此,您当然必须将段落包装在<p>
标签中,而不是仅仅用<br/>
. 但是<br/>
无论如何,标签是创建段落的错误方法。
您可以在or标记中查找和包装Text
节点,并给它们一些样式(,等):span
p
direction
textAlign
var root = document.getElementById("root"),
i,
node,
wrapper,
remove = [];
for (i = 0; i < root.childNodes.length; i++) {
node = root.childNodes[i];
if (node.nodeType === 3) { // text node
wrapper = document.createElement('p');
wrapper.innerHTML = node.nodeValue.trim(); // you may want NOT to trim text node values.
// for example:
wrapper.style.direction = 'rtl';
wrapper.style.textAlign = 'right';
root.replaceChild(wrapper, node);
} else if (node.nodeType === 1) {
remove.push(node);
}
}
while (remove.length > 0) {
root.removeChild(remove.pop());
}
JS Bin演示。