小编Mar*_*arc的帖子

如何使用Javascript计算元素的XPath位置?

假设我有一个包含不同类型标签的大型HTML文件,类似于您现在正在查看的StackOverflow.

现在让我们说你单击页面上的一个元素,Javascript函数会是什么样的,它会计算引用该特定元素的最基本的XPath?

我知道在XPath中有一种无限的方式来引用该元素,但我正在寻找一些只关注DOM树的东西,而不考虑ID,类等.

例:

<html>
<head><title>Fruit</title></head>
<body>
<ol>
  <li>Bananas</li>
  <li>Apples</li>
  <li>Strawberries</li>
</ol>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

假设您点击苹果.Javascript函数将返回以下内容:

/html/body/ol/li[2]
Run Code Online (Sandbox Code Playgroud)

它基本上只是向上运行DOM树一直到HTML元素.

只是为了澄清,'on-click'事件处理程序不是问题.我能做到这一点.我只是不确定如何计算元素在DOM树中的位置并将其表示为XPath.

PS赞赏使用或不使用JQuery库的任何答案.

PPS我对XPath完全不熟悉,所以我甚至可能在上面的例子中犯了一个错误,但你会明白这个想法.

编辑于2010年8月11日:看起来有人问了一个类似的问题:为选定的textnode生成/获取Xpath

html javascript xml jquery xpath

40
推荐指数
5
解决办法
3万
查看次数

如何在不重复缩进代码的情况下在HAML中执行if/else

根据用户是否已登录,我想打印另一种%body标签.

这就是我目前的做法:

- if defined? @user
  %body(data-account="#{@user.account}")
    %h1 Welcome
    -# all my content
- else
  %body
    %h1 Welcome
    -# all my content
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,那里有很多重复的代码.我怎么能消除这个?我已经尝试过以下方法:

- if defined? @user
  %body(data-account="#{@user.account}")
- else
  %body
  %h1 Welcome
  -# all my content
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,因为HAML将其解释为好像%h1和内容是else语句的一部分,当然它们不是.

关于如何解决这个问题的任何想法?我一直在遇到这个问题,所以我无法想象它没有一个简单的解决方案.

ruby haml

16
推荐指数
2
解决办法
3万
查看次数

如何在一个多行包装句子中的每一行添加水平填充?

这是我的代码:

<div><p><span>... highlighted text ...</span></p><p>Chapter info</p></div>
Run Code Online (Sandbox Code Playgroud)

这是它目前的样子:

http://i48.tinypic.com/2dqvo1i.png

有没有办法在突出显示的文本的两侧添加填充?SPAN上的常规填充不起作用,因为它只考虑句子的开头和结尾,而不是单独的每一行.

有任何想法吗?CSS3代码很好.

html css css3

13
推荐指数
1
解决办法
1万
查看次数

如何在模型中使用Sinatra的Haml-helper?

在我的一个模型中,我有一个发送电子邮件的方法.我想通过Haml文件标记此电子邮件,该文件与我的其他视图一起存储.

有没有办法从模型中调用Sinatra的HAML帮助器?如果没有,我需要直接打电话给Haml:

@name = 'John Doe'
Haml::Engine.new(File.read("#{MyApplication.views}/email.haml")).to_html
Run Code Online (Sandbox Code Playgroud)

Haml模板有没有办法访问@name实例变量?

ruby haml sinatra

4
推荐指数
1
解决办法
957
查看次数

如何在Git历史中替换单词并正确调试相关问题?

我正在尝试从Git历史记录中删除密码等敏感数据.我没有删除整个文件,而只想用密码代替removedSensitiveInfo.这是我在浏览了大量StackOverflow主题和其他网站后想出的.

git filter-branch --tree-filter "find . -type f -exec sed -Ei '' -e 's/(aSecretPassword1|aSecretPassword2|aSecretPassword3)/removedSensitiveInfo/g' {} \;"
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时,它似乎正在重写历史记录(它显示了它重写的提交并需要几分钟).但是,当我检查是否确实已删除所有敏感数据时,它仍然存在.

作为参考,这是我如何进行检查

git grep aSecretPassword1 $(git rev-list --all)
Run Code Online (Sandbox Code Playgroud)

这向我展示了与搜索查询匹配的数百个提交.什么都没有被取代.

知道这里发生了什么吗?

我仔细检查了我正在使用的正则表达式,这似乎是正确的.我不知道还有什么可以检查或如何正确调试这个我的Git知识相当简陋.例如,我不知道如何测试1)我的正则表达式是否匹配任何东西,2)sed没有在所有文件上运行,3)文件更改没有被保存,或者4)其他东西.

很感谢任何形式的帮助.

PS我知道有关此主题的几个StackOverflow线程.但是,我找不到一个关于替换所有(ASCII)文件中的单词(而不是删除文件)(而不是指定特定文件或文件类型).不确定这是否应该有所作为,但所有建议的解决方案都不适用于我.

regex git replace sed git-filter-branch

3
推荐指数
1
解决办法
1501
查看次数

标签 统计

haml ×2

html ×2

ruby ×2

css ×1

css3 ×1

git ×1

git-filter-branch ×1

javascript ×1

jquery ×1

regex ×1

replace ×1

sed ×1

sinatra ×1

xml ×1

xpath ×1