查找上一个<a href="https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/loader/private/CrossOriginPreflightResultCache.cpp?l=44" rel="noreferrer">hardcoded</a> <p> <a> element?

时间:2017-03-02 14:47:38

标签: javascript jquery

<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:

function quote(post) { $(post).text(); }

This works to fetch the posts message, but how do I go about finding the Username?

I have tried using $(post).prev('a').text();, and $(post).parent().prev('a').text();, but nothing seems to work.

5 个答案:

答案 0 :(得分:1)

你可以在没有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"); 
  }
}

答案 1 :(得分:0)

通过查看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();

答案 2 :(得分:0)

查看您的示例HTML,如果您在Fatal error: Class 'MY_Controller' not found,只需转到父元素并获取最接近的p,您应该没问题:

a

答案 3 :(得分:0)

也许使用parent()然后使用previous()

var ancortext = $(post).parent().prev().text();

下面的功能示例。

function username(post) { 

     return $(post).parent().prev().text(); 
}

注意:这对我来说很有气味,你的代码非常依赖于这种方式的HTML结构。如果你改变HTML,你的javascript可能会破坏。

我已将您的代码复制到我自己的HTML文档中,并确认上面的jquery方法调用输出所需的结果。如果不是,那么您的源HTML和您发布的源代码会有所不同,或者您的jquery函数与此答案中所述的不同:)

答案 4 :(得分:0)

你的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>