如何找到特定的html元素模式

时间:2014-08-17 14:46:54

标签: javascript jquery html

我的代码示例:

<div id="ds">

    <classified_title check_zone="true" article="start" a_type="advertisement" cid="#P98_001"></classified_title>
    <p article_con="98.1" cid="#P98_005"></p>
    <p article="start" a_type="advertisement" cid="#P100_001"></p>
    <p article_con="98.1" cid="#P99_001"></p>
    <dc_title article="start" check_zone="true" a_type="article" cid="#P95_001"></dc_title>
    <pam_credit rot_ang="90_3021_1470_681_71" check_zone="true" article_con="95.1" cid="#P95_010">ILLUSTRATION BY HECTOR CADEMARTORI</pam_credit>
    <p article_con="95.1" link_para="95.1" cid="#P96_009"></p>
    <p article_con="95.1" link_para="96.1" cid="#P96_016"></p>
    <p article_con="95.1" link_para="96.1" cid="#P97_001"></p>
    <p article="end" cid="#P97_008"></p>

</div>

我想区分三组,如下面的代码:

<p article_con="98.1" cid="#P98_005"></p>
<p article="start" a_type="advertisement" cid="#P100_001"></p>
<p article_con="98.1" cid="#P99_001"></p>

第一个标记(<p article_con="98.1" cid="#P98_005"></p>)具有属性article_con,第二个标记(<p article="start" a_type="advertisement" cid="#P100_001"></p>)具有属性article="start",第三个标记又像第一个标记一样,{ {1}}属性具有相同的值。

不是那样的:

article_con

第一个和第三个标记的article_con属性值不同,重要的是第二个标记中必须有<p article_con="98.1" cid="#P98_005"></p> <p article="start" a_type="advertisement" cid="#P100_001"></p> <p article_con="98.2" cid="#P99_001"></p> 属性。

2 个答案:

答案 0 :(得分:0)

这就是我要做的事情:

<div id="98.1">
    <p cid="#P98_005"></p>
    <p article="start" a_type="advertisement" cid="#P100_001"></p>
    <p cid="#P99_001"></p>
</div>

如果在div中包装每组3并将其id属性设置为article_con编号,那么您可以使用以下命令轻松访问div及其子ID:

<script>
    var childrenArray = document.getElementById('98.1').childNodes;
</script>

从那里,您可以访问该数组中的第一,第二或第三段。

答案 1 :(得分:0)

我同意@Bluehound你应该重新格式化你的HTML,但如果你不能这样做,这是我的简单JS建议:

var findArticle = function() {
    var start = document.querySelectorAll('[article="start"]')
    var l = start.length
    for (var i = 0; i < l; i++) {
        var node = start[i]
        var prev = node.previousElementSibling
        if (!prev || !prev.hasAttribute('article_con')) continue
        var con = prev.getAttribute('article_con')
        var next = node.nextElementSibling
        if (!next || !next.hasAttribute('article_con') ||
            next.getAttribute('article_con') != con) continue
        return node
    }
    return null
}

var article = findArticle()
console.log(article)

示例代码here