在特定选择器Jquery之前查找所有链接

时间:2018-08-20 04:41:43

标签: jquery

我有这样的HTML:

int checkVal = getContext().checkCallingOrSelfPermission(requiredPermission);

我使用jQuery在public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String requiredPermission = "android.permission.WRITE_SECURE_SETTINGS"; int checkVal = checkCallingOrSelfPermission(requiredPermission); if (checkVal == PackageManager.PERMISSION_GRANTED) { } Toast.makeText(this, "WRITE_SECURE_SETTINGS has been granted to the application. You may now continue!", Toast.LENGTH_LONG).show(); if (checkVal == PackageManager.PERMISSION_DENIED) { } Toast.makeText(this, "WRITE_SECURE_SETTINGS has not been granted to the application. Please grant access to continue.", Toast.LENGTH_LONG).show(); } } 之前找到所有<div class="inpost"> <a href="">Link1</a> <div class=""> <a href="">Link2</a> <div class=""> <a href="">Link3 </a> </div> </div> <a href="">Link4</a> <a href="">Link5</a> <a href="">Link6</a> <a href="">Link7</a> [Size = M, L] <a href="">Link8</a> <a name="more"></a> something <br> <a href=""></a> something <br> something <br>something <br> </div> 标记,但是它不起作用。

a

您能建议我该怎么做吗?谢谢。

5 个答案:

答案 0 :(得分:4)

尝试将prevAll集合提取到一个变量中,然后filter将该集合a个(以获得匹配的同级兄弟),然后再add个另外的{{1}带有a的}(以获取匹配的后代):

.find
const prev = $("[name='more']").prevAll();
prev.filter('a').add(prev.find('a')).each(function(){
  console.log(this.textContent);
});

答案 1 :(得分:2)

find仅选择子节点。

一种执行所需操作的方法是遍历使用prevAll()获得的所有先前节点,并检查其是否为a或其他。

如果它不是a,则使用find选择所有子a

$("[name='more']").prevAll('*').each(function() {
  if ($(this).is('a')) {
    $(this).css('background-color', 'yellow');
  } else {
    $(this).find('a').css('background-color', 'yellow');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="inpost">
  <a href="">Link1</a>
  <div class="">
    <a href="">Link2</a>
    <div class="">
      <a href="">Link3 </a>
    </div>
  </div>
  <a href="">Link4</a>
  <a href="">Link5</a>
  <a href="">Link6</a>
  <a href="">Link7</a> [Size = M, L]
  <a href="">Link8</a>

  <a name="more">more</a> something

  <br>
  <a href=""></a>
  something<br> something
  <br>something<br>
</div>

答案 2 :(得分:0)

简单易行

$("a[name='more']").prevAll('a').each(function() {
  // here your logic
})

答案 3 :(得分:0)

您也可以尝试此代码

var flag =0;
jQuery(document).find('a').each(function(index, el) {
	if (!flag) {
		if ($(this).attr('name') == 'more') {
			flag =1;
			return false;
		}else {
			$(this).addClass('myclass');
			
		}
	}
});
.myclass {
    background: red
}
<script  src="https://code.jquery.com/jquery-3.3.1.min.js"  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

<div class="inpost">
	<a href="">Link1</a>
	<div class="">
	  <a href="">Link2</a>
	  <div class="">
	    <a href="">Link3 </a>
	  </div>
	</div>
	<a href="">Link4</a>
	<a href="">Link5</a>
	<a href="">Link6</a>
	<a href="">Link7</a>
	[Size = M, L]
	<a href="">Link8</a>

	<a name="more">link more</a>

	something<br>
	<a href="">last not styled</a>
	something<br>
	something<br>something<br>
</div> 


    

答案 4 :(得分:0)

如果在需要的a之前需要所有a元素(甚至在其他标记中),请尝试以下操作:

$(function(){
    console.log((function(p){return p.filter("a").add(p.find("a"));})($("[name='more']").prevAll()).length);
});

我之所以发布此答案,是因为我的上一篇文章满足了这一需求:“我们需要所有具有相同父项的上a个”。但是此答案将返回所有上一个a与每个父母。