使用RegExp查找,复制和粘贴标签内容

时间:2014-03-21 14:53:37

标签: javascript html regex

我有一个很长的HTML文件,我需要做一个相对简单的替换,但是,通过简单的查找/替换无法实现。我想知道RegExp是否可以帮助我完成这项工作。

所以,这是HTML片段:

<div class="panelHeader">
        <span class="QN_header">Info1</span>
        <span class="QT_header">Info2</span>
    </div>                                          

<div id="QXXXX" class="panelContent">
    <div class="Question">                      
        <span class="QNumber"></span>
        <span class="QText"></span>
    </div>
  <!-- some more tags here -->
</div>

因此最后应该看起来像:

<div class="panelHeader">
        <span class="QN_header">Info1</span>
        <span class="QT_header">Info2</span>
    </div>                                          

<div id="QXXXX" class="panelContent">
    <div class="Question">                      
        <span class="QNumber">Info1</span>
        <span class="QText">Info2</span>
    </div>
  <!-- some more tags here -->
</div>

我需要的是:

  1. <span class="QN_header">;
  2. 复制 Info1
  3. 将其插入<span class="QNumber">;
  4. <span class="QT_header">;
  5. 复制 Info2
  6. 将其插入<span class="QText">;
  7. 如果在几次迭代中可以实现 - 那没关系;更好的是在整个文件中手动复制/粘贴它。

    提前致谢。

    更新: 代码的整个REPEATABLE部分如下。然后它重演。

    <div class="panelHeader">                       <!-- BEGIN OF PANEL HEADER -->              
        <span class="QN_header"></span>
        <span class="QT_header"></span>
    </div>                                          <!-- END OF PANEL HEADER -->
    
    <div id="QXXXX" class="panelContent">           <!-- BEGIN OF CONTENT-->
        <div class="Question">                      
            <span class="QNumber"></span>
            <span class="QText"></span>
        </div>
    
        <div class="Guidance"><p></p></div>
        <div class="Response">
            <div class="responseControls">
                <label><input type="radio" name="RadioXXXX" value="Y" id="RXXXXY" onchange='radioChange(this, "XXXX")' />Yes</label>
                <label><input type="radio" name="RadioXXXX" value="N" id="RXXXXN" onchange='radioChange(this, "XXXX")' />No</label>
                <label><input type="radio" name="RadioXXXX" value="NS" id="RXXXXNS" onchange='radioChange(this, "XXXX")' />Not Seen</label>
                <label><input type="radio" name="RadioXXXX" value="NA" id="RXXXXNA" onchange='radioChange(this, "XXXX")' />Not Applicable</label>
            </div>
            <div class="responseDetails">
                <div class="Observation">
                    <label for="ObsXXXX">Observation:</label>
                    <textarea name="observation" id="ObsXXXX" rows="6" disabled ></textarea></div>
                <div class="DueDate">
                    <label for="DueDateXXXX">Due date:<br /></label>
                    <input name="DueDate" class="DueDate_in" type="text" id="DueDateXXXX"/>
                </div>
    
                <div class="actions">
                    <label for="paXXXX">Actions required to correct and/or prevent this observation:</label>
                    <textarea name="actions" id="paXXXX" rows="6"></textarea>
                </div>
            </div>                                  <!-- End of ResponseDetails -->
        </div>                                      <!-- End of Response -->
    </div>                                          <!-- END OF CONTENT -->
    

2 个答案:

答案 0 :(得分:1)

使用像jQuery这样的东西可能比正则表达式更有意义。您可以使用以下代码复制示例中的值:

$('.panelHeader').each(function() {
    var header = $(this);
    var qn = header.find('.QN_header').text();
    var qt = header.find('.QT_header').text();
    var content = header.next('.panelContent');
    content.find('.QNumber').text(qn);
    content.find('.QText').text(qt);
});

JSFiddle example

答案 1 :(得分:1)

如果他们只是在一个接一个地重复系统地重复,那就试试这个:

var panelHeaders = document.querySelectorAll('.panelHeader');
var panelContents = document.querySelectorAll('.panelContent');
for (var i=0;i<panelHeaders.length;i++) {
    panelContents[i].querySelector('.QNumber').innerHTML = panelHeaders[i].querySelector('.QN_header').innerHTML;
    panelContents[i].querySelector('.QText').innerHTML = panelHeaders[i].querySelector('.QT_header').innerHTML;
}

小提琴 - &gt;的 http://jsfiddle.net/8su4y/