Bringing the jQuery
syntax to R.
Install with devtools
:
library(devtools)
install_github("rQuery","jamiefolson",subdir="pkg")
To show how things work, consider the following document fragment:
<html>
<body>
<ul class="level-1">
<li class="item-i">I</li>
<li class="item-ii">II
<ul class="level-2">
<li class="item-a">A</li>
<li class="item-b">B
<ul class="level-3">
<li class="item-1">1</li>
<li class="item-2">2</li>
<li class="item-3">3</li>
</ul>
</li>
<li class="item-c">C</li>
</ul>
</li>
<li class="item-iii">III</li>
</ul>
</body>
</html>
Currently only a few jQuery
functions are implemented. Since $
is a pretty
important generic function, I thought it best not to overwrite it. Instead,
you can access the basic jQuery
selector with the function rQuery
or its
alias %$%
.
> library(XML)
> library(rQuery)
Loading required package: selectr
> doc = htmlParse("tmp.html")
> `%$%`(doc,"ul.level-2")
[[1]]
<ul class="level-2"><li class="item-a">A</li>
<li class="item-b">B
<ul class="level-3"><li class="item-1">1</li>
<li class="item-2">2</li>
<li class="item-3">3</li>
</ul></li>
<li class="item-c">C</li>
</ul>
jQuery
methods are implemented as S4
methods on the class rQueryResult
.
> showMethods(classes="rQueryResult")
...
Function: rQuery.add (package rQuery)
rquery="rQueryResult"
Function: rQuery.addClass (package rQuery)
rquery="rQueryResult"
...
> rQuery.class(`%$%`(doc,"ul"))
[1] "level-1"
In addition to the regular R syntax for calling methods, rQuery
emulates the jQuery
"chaining" syntax.
> `%$%`(doc,"body")$find("ul.level-2")$attr(x="value")$addClass("myclass")$prepend("<li>New item</li>")$addClass("AB")
[[1]]
<li class="AB">New item</li>
> doc
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><ul class="level-1">
<li class="item-i">I</li>
<li class="item-ii">II
<ul class="level-2,myclass" x="value">
<li class="AB">New item</li>
<li class="item-a">A</li>
<li class="item-b">B
<ul class="level-3">
<li class="item-1">1</li>
<li class="item-2">2</li>
<li class="item-3">3</li>
</ul>
</li>
<li class="item-c">C</li>
</ul>
</li>
<li class="item-iii">III</li>
</ul></body></html>
You can find the generated package documentation here.