1

我只是 Javascript 的初学者 :)

我希望能够接收文本块中的所有段落(意味着所有部分用<br/ >标签相互分隔),因此我可以根据语言(ltr 与 rtl)对每个这样的段落应用不同的对齐设置。

例如,如果我有以下文本:

Hello<br/>שלום

我希望“Hello”与左侧对齐,而“שלום”与右侧对齐。有没有可能以document.evaluate某种方式使用?

4

3 回答 3

1

假设你有一个 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”与左侧对齐,而“שלום”与右侧对齐。

你有三个选择。

  1. HTML dir 属性,如<span dir="rtl">שלום</div>闪米特语系中的大多数从右到左的脚本。
  2. CSS方向<span style="direction:rtl">שלום</span>
  3. Unicode 双向嵌入代码点U+202A-U+202C。

ClosuredetectRtlDirectionality启发式地检测 RTL 文本。

于 2013-04-15T17:23:11.593 回答
0

使用document.getElementsByTagName("p"). 为此,您当然必须将段落包装在<p>标签中,而不是仅仅用<br/>. 但是<br/>无论如何,标签是创建段落的错误方法。

于 2013-04-15T17:21:42.590 回答
0

您可以在or标记中查找和包装Text节点,并给它们一些样式(,等):spanpdirectiontextAlign

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演示。

于 2013-04-15T17:49:38.483 回答