我有像
这样的内容 <div id="sContainer">
<div class="message0" id="l0">Initial Content 111</div>
<div class="message1" id="l1">Initial Content 222</div>
<div class="message2" id="l2">Initial Content 333</div>
<div class="message3" id="l3">Initial Content 444</div>
<div class="message4" id="l4">Initial Content 555</div>
<div class="message5" id="l5">Initial Content 666</div>
<div class="message6" id="l6">Initial Content 777</div>
</div>
http://jsfiddle.net/LRLR/0sbdttds/
即使在div中,我还有一些div(未显示)
有没有找到哪些div在屏幕上可见?
要求: 1.每次div聚焦,我想添加css属性 2.我需要存储一个变量
答案 0 :(得分:1)
您可以使用:visible
属性选择器来获取显示的元素
$(function() {
var divs = $('[id^=l]:visible');
console.log('shown divs', divs);
alert('divs shown: ' + divs.length);
});
/* for testing purpose */
[id^=l] {
/* id starting with `l` */
display: none;
}
[id^=l]:nth-child(3n) {
/* every third element */
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="sContainer">
<div class="message0" id="l0">Initial Content 111</div>
<div class="message1" id="l1">Initial Content 222</div>
<div class="message2" id="l2">Initial Content 333</div>
<div class="message3" id="l3">Initial Content 444</div>
<div class="message4" id="l4">Initial Content 555</div>
<div class="message5" id="l5">Initial Content 666</div>
<div class="message6" id="l6">Initial Content 777</div>
</div>
答案 1 :(得分:0)
$("div[id^='l']:visible").addClass("Your_Class_Name");
答案 2 :(得分:0)
可以使用id
伪选择器过滤掉:visible
的可见元素。我设置了tabIndex
,以便<div>
可以使用var dataAbc = '<div class="message7" tabindex="1">Focus Shifted Here</div>';
// I am prepending just 1 <div> as of now. To prepend multiple <div>s, make sure to increment the tabIndex using a for loop.
setTimeout(function(){ $(dataAbc).prependTo("#sContainer");},3000);
$("div:visible").each(function(){
console.log($(this).attr('id'));
});
$(document).on("focusin", "div div", function(){
$(this).css("background", "yellow");
});
$(document).on("focusout", "div div", function(){
$(this).css("background", "white");
});
。
请查看下面的工作代码段:
.message0 {margin: 30px;height: 200px;border: 10px solid green;}
.message1 {margin: 30px;height: 200px;border: 10px solid yellow;}
.message2 {margin: 30px;height: 200px;border: 10px solid pink;}
.message3 {margin: 30px;height: 200px;border: 10px solid blue;}
.message4 {margin: 30px;height: 200px;border: 10px solid black;}
.message5 {margin: 30px;height: 200px;border: 10px solid cyan;}
.message6 {margin: 30px;height: 200px;border: 10px solid orange;}
.message7 {margin: 30px;height: 200px;border: 10px solid red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="sContainer">
<div class="message0" id="l0" tabindex="2">Initial Content 111</div>
<div class="message1" id="l1" tabindex="3">Initial Content 222</div>
<div class="message2" id="l2" tabindex="4">Initial Content 333</div>
<div class="message3" id="l3" tabindex="5">Initial Content 444</div>
<div class="message4" id="l4" tabindex="6">Initial Content 555</div>
<div class="message5" id="l5" tabindex="7">Initial Content 666</div>
<div class="message6" id="l6" tabindex="8">Initial Content 777</div>
</div>
{{1}}
查看以下文档链接:
答案 3 :(得分:0)
我认为你正在寻找
$(document).ready(function(){
var i,classes;
var divs_num = $('#sContainer div').length;
for(i = 0 ; i < divs_num; i++){
Ids= $('#sContainer div:visible').eq(i).attr('id');
if(typeof Ids !== 'undefined'){
alert(Ids);
if(Ids == 'l3' ){
$('#'+Ids).css('background','blue');
}
}
}
$('#sContainer div').on('click',function(){
$('#sContainer div').css('border','5px solid blue');
$(this).css('border','5px solid red');
});
});
DEMO代码获取所有可见的div并警告所有可见的div ID ..然后检查例如id l3,如果它的可见将其背景更改为红色..并在click事件中点击任何div更改其边框为红色并将所有其他div更改为蓝色边框
答案 4 :(得分:0)
您可以使用事件委派来查找正在关注的元素。请参阅:http://jsfiddle.net/0sbdttds/1/
关键是要向父级添加一个监听器,如下所示:
$("#sContainer").click(showMessage);
然后在处理程序中,使用事件来检查目标,如下所示:
var focusedElement = $("#" + e.target.id);
focusedElement然后包含一个jQuery对象,该对象指向该动作所针对的元素(在小提琴的情况下是一个单击。)
以上小提琴适用于点击。如果您想要重点检查How to focus div?
此外,您的小提琴中的CSS可以改进。它不是DRY:http://csswizardry.com/2013/07/writing-dryer-vanilla-css/
答案 5 :(得分:0)
要查找视口中的div
,需要比jQuery提供的更多功能。你可能需要像Viewport这样的东西,这是我为这类问题写的一个类。
var viewport = new Viewport(window);
viewport.addEventListener("scroll:complete", function(vp) {
viewport.querySelectorAll("div.message", function(div) {
div.classList.add("foo");
});
});
要在视口中检测的每个div
都应该有一个公共类,以使代码更易于维护。请注意,从版本9开始支持Internet Explorer,加上符合标准的标准浏览器。