首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Javascript使用xPath动态修改HTML源代码

使用Javascript使用xPath动态修改HTML源代码
EN

Stack Overflow用户
提问于 2011-06-14 08:39:02
回答 3查看 1.9K关注 0票数 1

假设我有一个HTML源代码,如下所示:

代码语言:javascript
复制
<a href="http://google.com">Google</a>
<a href="http://yahoo.com">Yahoo</a>
<a href="http://msn.com">MSN</a>

有没有办法让我用Javascript用xPath修改这个HTML源:找到所有的锚点,在它们前面加上文本,然后用一个警告框显示新的HTML源?

代码语言:javascript
复制
<a href="http://google.com">Visit Google</a>
<a href="http://yahoo.com">Visit Yahoo</a>
<a href="http://msn.com">Visit MSN</a>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-14 15:28:04

如果你需要XSLT的全部功能来进行几次转换,你可以使用像sarissa这样的东西。

我认为您可能会混淆xPath expressionsCSS selectors,因此在这种情况下,我建议使用以下jQuery代码:

代码语言:javascript
复制
// Put a script tag including jquery.js here

<div id="container">
  <a href="http://google.com">Google</a>
  <a href="http://yahoo.com">Yahoo</a>
  <a href="http://msn.com">MSN</a>
</div>

<script>
    $("a").prepend("Visit ");
    alert($("#container").html());
</script>

致以问候。

票数 2
EN

Stack Overflow用户

发布于 2011-06-14 12:08:33

简短的回答是“不”。

XPath是一种在DOM中选择元素的方法。它还可用于读取属性和计算值,但不能用于修改DOM。您可能会混淆XSLT,它使用XPath表达式来选择元素,并且可以返回修改后的文档。您可以使用一个通用的XML文档,然后使用XSLT使用不同的XSL样式表生成各种语言的不同文档,比如HTML、XML、postscript等等。

无论如何,在这种情况下,您为什么要费心使用XPath呢?有一个document.links集合,它需要简单的属性访问,没有函数调用或计算XPath表达式。您可以通过为W3C textContent或专有MS innerText属性赋值来更改简单的文本内容(同样,是简单的属性访问而不是函数调用):

代码语言:javascript
复制
function modLinks() {

  var links = document.links;
  var i = links.length;

  while (i--) {
    setText(links[i], 'Visit ' + getText(links[i]) );
  }
}

// Simple helper functions, can be made faster and more robust
// but sufficient for an example. 

function getText(el)  {

  if (typeof el.textContent == 'string') {
    return el.textContent;

  } else if (typeof el.innerText == 'string') {
    return el.innerText;
  }
}

function setText(el, text)  {

  if (typeof el.textContent == 'string') {
    el.textContent = text;

  } else if (typeof el.innerText == 'string') {
    el.innerText = text;
  }
}
票数 2
EN

Stack Overflow用户

发布于 2011-06-14 21:41:44

如上所述,XPath不能有效地处理未解析的字符串。

因此,一种方法是将某个元素(例如,不可见的)的innerHTML设置为您的HTML源字符串。

这将导致源代码被解析为DOM树。然后,您可以使用myDiv.getElementsByTagName('a')或jQuery $('a',myDiv)来查找链接。(您甚至可以使用XPath .//a,但既然更简单的工具也可以使用,为什么还要使用更复杂的工具呢?)

然后,一旦你修改了字符串,比如有人说使用jQuery $('a', myDiv).prepend("Visit ");,你就可以通过检索不可见divinnerHTML属性来输出修改后的超文本标记语言。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6337933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档