2、获取节点

获取节点

  • jQuery选择器
  • 获取节点

一、jQuery选择器

1.1、基本选择器

  1. 标签选择器(元素选择器)

    • 语法:$(“HTML标签名”),获取所有同标签名匹配的元素对象【数组】
      var demo1 = $("div");//获取所有的div元素【数组】
    
  2. ID选择器

    • 语法:$("#id的属性值"),获取与指定ID属性匹配的元素对象
      var demo2 = $("#div1");//获取id=div1的元素对象
    
  3. 类选择器

    • 语法:$(".class的属性值"),获取与指定class属性匹配的元素对象【数组】
      var demo1 = $(".div");//获取所有class=div的元素对象【数组】
    
  4. 并集选择器

    • 语法:$(“选择器1,选择器2,…”),获取多个选择器选中的元素对象【数组】
      var demo1 = $("div,#div1");//获取所有的div元素和id=div1的元素【数组】
    

1.2、层级选择器

  1. 后代选择器

    • 语法:$(“A B”),A元素内部的所有B元素
      var demo1 = $("div .div");//获取所有的div元素中的class=div的元素【数组】
    
  2. 子代选择器

    • 语法:$(“A>B”),A元素内部的所有直系B元素
      var demo1 = $("div>.div");//获取所有的div元素中的class=div的直系元素【数组】
    

1.3、属性选择器

  1. 属性名称选择器

    • 语法:$(“A[属性名]”),包含指定属性名的选择器
      var attr1 = $("div[border]");//获取所有设置了border属性的div元素【数组】
    
  2. 属性选择器

    • 语法:$(“A[属性名=‘值’ ]”),包含指定属性名且属性值匹配的选择器
      var att2 = $("div[class='div1']");//获取class=div1的div元素【数组】
    
  3. 复合属性选择器

    • 语法:$(“A[属性名=‘值’ ],B[属性名=‘值’ ],…”),包含多个属性选择器的选择器
      var att3 = $("div[width='100px'],span[color='red']")//获取红色字体的span元素和宽100的div元素
    

1.4、过滤选择器

  1. 首元素选择器

    • 语法:$(“XX:first”),获得选择的元素中的第一个元素
      var first = $("div:first");//获取文档中的第一个div元素
    
  2. 尾元素选择器

    • 语法:$(“XX:last”),获得选择的元素中的最后一个元素
      var last = $(".div:last");//获取文档中最后一个class=div的元素
    
  3. 非元素选择器

    • 语法:$(“XX:not(selectot)”),不包括指定内容的元素
      var not = $("div:not(#div1)");//获取class=div且id!=div1的所有元素
    
  4. 偶数选择器

    • 语法:$(“XX:enve”),获得选择的元素中的偶数个元素(从0开始计数)
      var even = $("tr:enve");//获取表格中所有的偶数行元素
    
  5. 奇数选择器

    • 语法:$(“XX:odd”),获得选择的元素中的奇数个元素(从0开始计数)
      var odd = $("tr:odd");//获取表格中所有的奇数行元素
    
  6. 等于索引选择器

    • 语法:$(“XX:eq(index)”),获得选择的元素中的指定索引位置的元素
      var equal = $("div:eq(3)");//获取文档中索引等于3的那个div元素
    
  7. 大于索引选择器

    • 语法:$(“XX:gt(index)”),获得选择的元素中的大于指定索引位置的元素
      var more = $("div:gt(3)");//获取文档中索引大于3的所有div元素
    
  8. 小于索引选择器

    • 语法:$(“XX:lt(index)”),获得选择的元素中的小于指定索引位置的元素
      var less = $("div:lt(3)");//获取文档中索引小于3的所有div元素
    
  9. 标题选择器

    • 语法:$(":header"),获取所有的标题元素【固定写法】
      var less = $(":header");//获取文档中的所有标题元素
    

1.5、表单过滤选择器

  1. 可用元素选择器(disabled=”disabled"修饰的表单无法选中,自然也不可用)

    • 语法:$(“XX:enabled”)
      var text1 = $("input[type='text']:enabled");//获取所有可用的文本框元素
    
  2. 不可用元素选择器

    • 语法:$(“XX:disabled”)
      var text1 = $("input[type='text']:disabled");//获取所有不可用的文本框元素
    
  3. 选中选择器

    • 语法:$(“XX:cheked”)
      var text1 = $("input[type='checkbox']:cheked");//获取所有被选中的复选框元素
    
  4. 选中选择器

    • 语法:$(“XX:select”)
      var text1 = $("select>option:select");//获取所有被选中的复选下拉框元素
    

二、获取节点

2.1、获取父节点

  • parent():向上遍历,返回直系父节点

    <body>
        <div>
            <p id="p1">AAA...</p>
        </div>
    </body>
    <script>
    	var div = $("#p1").parent();
        console.log(div.prop("tagName"));
        //运行结果:DIV
    </script>
    

2.2、获取子节点

  • children():返回当前节点所有的直系子节点(可以加参数过滤)。【不包含文本节点和注释节点】

    <body>
        <div id="div1">
            <p>AAA...</p>
            <div><p>BBB...</p></div>
            <p>CCC...</p>
        </div>
    </body>
    <script>
        var child = $("#div1").children("div");
        console.log(child.html());
        //运行结果:<p>BBB...</p>
    </script>
    

2.3、获取兄弟节点

  • siblings():返回匹配元素集合中的所有元素的所有兄弟节点

  • next():返回匹配元素集合中的所有元素的下一个兄弟节点

  • nextAll():返回匹配元素集合中的所有元素前面的所有兄弟节点

  • prev():返回匹配元素集合中的所有元素的上一个兄弟节点

  • prevAll():返回匹配元素集合中的所有元素的前面的所有兄弟节点

    <body>
        <div id="div1">
            <p>AAA...</p>
            <div><p>BBB...</p></div>
            <p>CCC...</p>
        </div>
    </body>
    <script>
        var child = $("#div1>div").next();
        console.log(child.text());
        //运行结果:BBB...
    </script>
    
<think>嗯,用户的问题是询问如何在Qt中使用QDomElement获取节点的方法或示例,涉及XML解析。首先,我需要回忆一下Qt中处理XML的相关类,比如QDomDocument、QDomElement、QDomNode等。用户提到的引用内容里提到了一些关键点,比如elementById不可用,需要用elementsByTagName或遍历子节点。 首先,我应该先确定用户需要的是获取所有子节点的方法,还是根据标签名查找特定的子节点。根据问题描述,用户可能想知道如何遍历子节点或者使用特定方法获取子元素。 接下来,我需要考虑QDomElement的方法。QDomElement继承自QDomNode,所以可以使用QDomNode的方法,比如firstChild()和nextSibling()来遍历子节点。另外,QDomElement的elementsByTagName方法可以返回所有符合标签名的节点列表,但要注意这会递归查找整个子树,而不仅仅是直接子节点。 用户提供的引用中提到elementById没有实现,所以必须避免使用这个方法。另外,创建元素时可能需要使用命名空间,但用户的问题主要是关于获取节点,所以可能不需要深入讨论命名空间的问题。 接下来,我需要考虑如何编写示例代码。用户可能需要一个逐步的示例,展示如何加载XML文件,获取根元素,然后遍历其子节点。同时,需要区分元素节点和其他类型的节点,比如文本节点或注释节点,所以检查nodeType是否为QDomNode::ElementNode是必要的。 可能还需要提到如何获取节点的标签名和属性,这在处理XML时很常见。例如,在遍历每个子元素时,获取其属性名和值,或者文本内容。 另外,用户引用的内容里提到了QDomNodeList和如何通过索引访问节点,所以示例代码中应该包括循环遍历QDomNodeList的示例,比如使用elementsByTagName获取所有特定标签的元素,然后逐个处理。 需要注意的是,直接子节点和所有后代节点的区别。elementsByTagName会返回所有匹配的后代节点,而如果用户只需要直接子节点,可能需要遍历每个子节点并检查其是否为元素节点。 总结一下,回答应该包括两种方法:遍历所有子节点并过滤元素节点,以及使用elementsByTagName方法获取特定标签的节点。同时,提供代码示例,并解释每个步骤的作用,确保用户能够理解如何实现。 可能还需要提醒用户关于节点类型的重要性,避免处理到非元素节点导致错误。此外,引用用户提供的参考内容,比如引用[2]和[3],来支持方法的正确性,比如使用documentElement()获取根元素,以及elementsByTagName的使用。 最后,生成相关问题时要围绕XML解析的其他常见操作,比如修改属性、保存XML、处理命名空间等,帮助用户扩展相关知识。</think>### 使用QDomElement获取节点的方法及示例 在Qt中通过`QDomElement`获取节点时,需结合`QDomNode`和`QDomNodeList`进行操作。以下是具体方法及示例: --- #### 1. **遍历所有子节点** 通过`firstChild()`和`nextSibling()`逐级遍历子节点,并过滤出元素节点(忽略文本节点、注释等): ```cpp QDomElement root = doc.documentElement(); // 获取节点[^2] QDomNode child = root.firstChild(); while (!child.isNull()) { if (child.isElement()) { // 仅处理元素节点 QDomElement element = child.toElement(); qDebug() << "子节点标签名:" << element.tagName(); // 可进一步操作属性或子节点 } child = child.nextSibling(); } ``` --- #### 2. **按标签名获取节点** 使用`elementsByTagName(const QString& name)`直接获取所有匹配的**后代节点**(包含子节点、孙节点等): ```cpp QDomNodeList list = root.elementsByTagName("book"); // 获取所有<book>节点[^3] for (int i = 0; i < list.size(); ++i) { QDomElement element = list.at(i).toElement(); qDebug() << "节点属性id:" << element.attribute("id"); } ``` 注意:此方法会递归搜索整个子树,若需仅查找直接子节点,需手动遍历并过滤。 --- #### 3. **获取节点的属性与内容** 对已获取的子节点,可读取其属性或文本内容: ```cpp QString title = element.attribute("title"); // 获取属性 QDomNode textNode = element.firstChild(); // 获取文本内容 if (textNode.isText()) { qDebug() << "内容:" << textNode.nodeValue(); } ``` --- ### 完整示例代码 ```cpp QFile file("data.xml"); if (!file.open(QIODevice::ReadOnly)) return; QDomDocument doc; if (!doc.setContent(&file)) { file.close(); return; } QDomElement root = doc.documentElement(); QDomNode node = root.firstChild(); while (!node.isNull()) { if (node.isElement()) { QDomElement element = node.toElement(); qDebug() << "节点名:" << element.tagName(); if (element.hasAttribute("id")) { qDebug() << "属性id值:" << element.attribute("id"); } } node = node.nextSibling(); } file.close(); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值