<a href="/user/SOMEUSERNAME">SOMEUSERNAME</a>
<div class="col s9">
<p id="p_50">Some message</p>
<br>
<br>
<span class="forumtools">
<strong>
<a onclick="quote(\'p#p_50\')">Quote</a>
</strong>
<span class="right">Written SOMEDATE</span>
</span>
</div>
的JQuery/JS:查找前一个<a>元素?
function quote(post) { $(post).text(); }
本工程以获取职位信息,但我要如何去寻找用户名?
我试过使用$(post).prev('a').text();
和$(post).parent().prev('a').text();
,但似乎没有任何工作。
你可以不用jQuery的。如果可能的话,更改HTML和当前链接传递给函数,就像这样:
<a onclick="quote(\'p#p_50\', this)">Quote</a>
然后你就可以通过所有链接只是搜索:
function quote(str, currentLink) {
var allLinks = document.getElementsByTagName("a"); // get all links in document
var index = allLinks.indexOf(currentLink);
if (index > 0) {
var prevLink = allLinks[index-1];
console.log(prevLink); // log it to browser console
} else {
console.log("there is no previous link");
}
}
通过查看DOM结构,它应该与$(post).parent().prev().text()
一起使用。
替代方式,你怎么样包装所有的人都用<div>
,像这样:XD
<div id="message1">
<a href="/user/SOMEUSERNAME">SOMEUSERNAME</a>
<div class="col s9">
<p id="p_50">Some message</p>
<br>
<br>
<span class="forumtools">
<strong>
<a onclick="quote(\'#message1\')">Quote</a> //change to wrapper id
</strong>
<span class="right">Written SOMEDATE</span>
</span>
</div>
</div>
然后得到那个职位的文字:$(post).find('#p_50').text();
来获取用户名:$(post).find('a:first').text();
这样的帖子只要确保告诉OP像'$(post).parent()。prev()。text()。'这样的查询非常脆弱,OP应该更好地构建HTML而不是编写代码,即使在HTML中发生微小变化,代码也会发生变化。 –
看看你的示例HTML,如果你在p
,只需去父元素,并得到最接近的a
,你应该没事的:
function quote(post) {
var post = $(post).text();
var user = $(post).parent().closest('a').text();
}
也许使用父(),然后先前的()
var ancortext = $(post).parent().prev().text();
下面的函数的例子。
function username(post) {
return $(post).parent().prev().text();
}
注意:这个味道对我来说很重要,你的代码和这种HTML结构非常相关。如果你改变HTML,很可能你的javascript会崩溃。
我已将您的代码复制到我自己的HTML文档中,并确认上面的jquery方法调用输出所需的结果。如果你不是,那么你的源HTML和你发布的源代码有所不同,或者你的jQuery功能与此答案中陈述的不同:))
这是因为你的JS小提琴是错误的。 https://jsfiddle.net/wrco905a/10/ –
你的onclick属性是错误的,因为onclick接受javascript,所以该值可以是支持js,然后onclick =“quote('p#p50')
”。
function quote(post) {
var subject = $(post).text();
var user=$(post).parent().prev('a').text();
console.log('posted '+subject+' by '+user);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="/user/SOMEUSERNAME">SOMEUSERNAME</a>
<div class="col s9">
<p id="p_50">Some message</p>
<br>
<br>
<span class="forumtools">
<strong>
<a onclick="quote('p#p_50')">Quote</a>
</strong>
<span class="right">Written SOMEDATE</span>
</span>
</div>
您可以使用https://api.jquery .com/prev /获取上一个元素。 – Oddadmix
针对您的问题,您可以使用用户名在一个元素上添加数据用户名。 – Oddadmix
@Oddadmix OP发布他们已经尝试过,并且不起作用 –