捕捉文本中的换行符

Catching Line Breaks in Text

本文关键字:换行符 文本      更新时间:2023-09-26

所以我用javascript分析了一堆HTML,这样我就可以把这篇文章减少到30个字符,并附加一些类似"。。。问题是文本块被BR标签隔开。这是我的密码;

<head runat="server">
<title></title>
<script type="text/javascript"src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
    window.onload = function onLoad() {
        alert("Start");
        var intros = this.document.getElementById('EventContent');
        if (intros) {
            for (i = 0; i < intros.length; i++) {
                var els = intros[i].childNodes;
                if (els) {
                    for (j = 0; j < els.length; j++) {
                        alert(els[j].tagName)
                    }
                }
            }
        }
        alert("Start");
    }
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="EventContent">
<br />

<br />
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
</div>
</form>
</body>

但是我的警报标记名从不显示,尽管我确实收到了STARTEND的警报。我做错了什么?我怎么能赶上那些愚蠢的断线。。。

document.getElementById只返回一个元素;不要试图绕过它。

window.onload = function() {
    alert("Start");
    var intro = document.getElementById('EventContent');
    var els = intro.childNodes;
    for (var i = 0; i < els.length; i++) {
        alert(els[i].tagName);
    }
    alert("Stop");
};

至于你只检索文本的最终目标,试试这个:

function getText(element) {
    var i, c, r = '';
    for(i = 0; c = element.childNodes[i]; i++) {
        if(c.nodeType === 3) {
            r += c.nodeValue;
        }
    }
    return r.replace(/^'s+|'s+$/g, '');
}

您的变量'intros'不是数组,因此intros.length是未定义的。您只需要迭代intros.childNodes

<head runat="server">
<title></title>
<script type="text/javascript"src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
    window.onload = function onLoad() {
        alert("Start");
        var intros = this.document.getElementById('EventContent');
        if (intros) {
            for (i = 0; i < intros.childNodes.length; i++) {
                alert(intros.childNodes[i].tagName)
            }
        }
        alert("Start");
    }
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="EventContent">
<br />
<br />
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
</div>
</form>
</body>

也就是说,如果您无论如何都在使用jquery,您可能希望以这种方式进行尝试。

也就是说,与其迭代子节点,我可能只需要获取div(div.innerHTML)的内容,regex <br />的内容并替换为换行符,然后使用子字符串将前30个字符从其余字符中分离出来。

哦,正如上面所建议的,使用调试器。

  • Firefox:http://getfirebug.com/
  • 铬:https://developers.google.com/chrome-developer-tools/
  • 即:http://www.debugbar.com/