当前位置: 首页 > 面试题库 >

如何使用jQuery选择文本节点?

陆臻
2023-03-14
问题内容

我想获取一个元素的所有后代文本节点,作为jQuery集合。最好的方法是什么?


问题答案:

jQuery对此没有方便的功能。您需要结合使用contents(),将仅提供子节点,但包括文本节点,与结合find(),将提供所有后代元素,但不提供文本节点。这是我想出的:

var getTextNodesIn = function(el) {
    return $(el).find(":not(iframe)").addBack().contents().filter(function() {
        return this.nodeType == 3;
    });
};

getTextNodesIn(el);

注意:如果您使用的是jQuery 1.7或更早的版本,则上面的代码将不起作用。
要解决此问题,请替换addBack()andSelf()。从1.8开始andSelf()不推荐使用addBack()

与纯DOM方法相比,这效率低下,并且必须为jQuery重载其contents()功能提供一个丑陋的解决方法(感谢注释中的@rabidsnail指出了这一点),因此这是使用简单递归函数的非jQuery解决方案。该includeWhitespaceNodes参数控制是否在输出中包括空格文本节点(在jQuery中,它们会自动过滤掉)。

更新:修复了includeWhitespaceNodes错误时的错误。

function getTextNodesIn(node, includeWhitespaceNodes) {
    var textNodes = [], nonWhitespaceMatcher = /\S/;

    function getTextNodes(node) {
        if (node.nodeType == 3) {
            if (includeWhitespaceNodes || nonWhitespaceMatcher.test(node.nodeValue)) {
                textNodes.push(node);
            }
        } else {
            for (var i = 0, len = node.childNodes.length; i < len; ++i) {
                getTextNodes(node.childNodes[i]);
            }
        }
    }

    getTextNodes(node);
    return textNodes;
}

getTextNodesIn(el);


 类似资料:
  • 问题内容: 我有以下HTML标记: 当我使用CSS选择器时,我得到了。 不幸的是,我不能更改标记,而只能使用CSS选择器,因为我使用的是聚合RSS提要的系统。 是否有我只能接受文本节点的CSS选择器?具体在这个例子中? 问题答案: 这里的问题是您写入屏幕的内容没有显示在DOM:P中。 也似乎还行不通(至少在Safari 6.0.3中对我来说),或者它根本还没有产生预期的结果。 最后是属性选择器,使

  • 问题内容: jQuery或jQuery-UI是否具有禁用给定文档元素的文本选择功能? 问题答案: 在jQuery 1.8中,可以按照以下步骤进行操作:

  • 如果我有 如果我想选择包含td的a,我该怎么做? 我测试过: 但是我要获得td节点,我要获得a节点。如何使用XPath实现这一点?

  • 我有一些连接的选择工作良好。顺便说一句,我想把这些选择转换成很小的选择,但我发现这样做有些困难。例如,我有一个ID为的select。当我选择的一个大于零的选项时,应该会出现其他选择。之后,当我更改级联选择的选项(例如在中)时,该选项会正确更改。但是,当我选择另一次时,中的选项zero和我选择另一次时,中大于zero的选项会出现,而另一次选择中已经选择了选项。 这是我的javascript代码: 这

  • 问题内容: 我需要有关jQuery选择器的帮助。假设我有一个标记,如下所示: 除了用户单击时,如何获取所有复选框? 问题答案: 一个更完整的示例适用于您的情况: 当被点击复选框,该复选框的状态进行检查,并在当前形式的所有复选框被设置为相同的状态。 请注意,您无需从选择中排除该复选框,因为该复选框的状态将与其他所有复选框相同。如果出于某些原因确实需要排除,则可以使用以下方法:

  • 问题内容: 我想将文本作为标签添加到我的网页,并使它不可选择。 换句话说,当鼠标光标悬停在文本上方时,我希望它根本不会变成文本选择光标。 我要实现的目标的一个很好的例子是该网站上的按钮(问题,标签,用户等)。 问题答案: 用普通的HTML无法做到这一点,因此JSF在这里也无法为您做很多事情。 如果您仅针对体面的浏览器,则只需使用CSS3: 如果您还想涵盖较旧的浏览器,请考虑以下JavaScript