首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >一些JavaScript和jQuery在同一页面上的冲突

一些JavaScript和jQuery在同一页面上的冲突
EN

Stack Overflow用户
提问于 2018-08-29 04:22:05
回答 2查看 0关注 0票数 0

我正在使用JavaScript函数和一些jQuery在页面上执行两个操作。第一个是一个简单的JS函数来隐藏/显示div并更改选项卡的活动状态:

这是显示/隐藏div并在某些选项卡上更改活动状态的JS:

代码语言:javascript
复制
var ids=new Array('section1','section2','section3');

function switchid(id, el){  
    hideallids();
    showdiv(id);

    var li = el.parentNode.parentNode.childNodes[0];
    while (li) {
        if (!li.tagName || li.tagName.toLowerCase() != "li")
            li = li.nextSibling; // skip the text node
        if (li) {
          li.className = "";
          li = li.nextSibling;
        }
    }
    el.parentNode.className = "active";
}

function hideallids(){
    //loop through the array and hide each element by id
    for (var i=0;i<ids.length;i++){
        hidediv(ids[i]);
    }         
}

function hidediv(id) {
    //safe function to hide an element with a specified id
        document.getElementById(id).style.display = 'none';
}

function showdiv(id) {
    //safe function to show an element with a specified id        
        document.getElementById(id).style.display = 'block';
}

html:

代码语言:javascript
复制
<ul>
<li class="active"><a onclick="switchid('section1', this);return false;">ONE</a></li>
<li><a onclick="switchid('section2', this);return false;">TWO</a></li>
<li><a onclick="switchid('section3', this);return false;">THREE</a></li>
</ul>

<div id="section1" style="display:block;">TEST</div>
<div id="section2" style="display:none;">TEST 2</div>
<div id="section3" style="display:none;">TEST 3</div>

现在问题....

我已将名为galleria的jQuery图像库添加到其中一个选项卡中。当它位于最初显示为div的div中时,该库工作得很好。但是,当它位于其中一个设置为display:none的div中时; 当div被切换为可见时,库的一部分不起作用。具体来说,以下css不再编写(这是由galleria jQuery创建的):

代码语言:javascript
复制
element.style  {
display:block;
height:50px;
margin-left:-17px;
width:auto;
}

对于我的生活,我无法弄清楚为什么画廊失败时它的div设置为display:none。由于在单击选项卡时(通过上面的Javascript函数)会覆盖此声明,为什么会导致问题?正如我所提到的,当它生活在显示器中时它完美地工作:块; DIV。

有任何想法吗?我不希望任何人熟悉jQuery galleria图片库...但也许是一个人如何修复这个问题的想法?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-08-29 13:01:05

我的第一个建议是重新编写你原来的Javascript函数来使用jQuery。它已经具有内置的可见性切换功能......使用相同的系统可以最大限度地减少冲突并使代码更加平滑。

票数 0
EN

Stack Overflow用户

发布于 2018-08-29 14:19:24

如果你包含jQuery,那么你可以缩短你的javascript到这个:

代码语言:javascript
复制
$(function() {

var sections = $('#section1, #section2, #section3');
function switchid(id, el){  
    sections.hide();
    $('#'+id).show();
    $(this).addClass('active').closest('ul').find('li').removeClass('active');
}

});

我也会删除设置的内联样式display:none。然后你可以在你的javascript中初始化广场,然后隐藏你的部分。

就像是:

代码语言:javascript
复制
$(function() {

$('#section2, #section3').hide();
$('#section2 .images').galleria();

var sections = $('#section1, #section2, #section3');
function switchid(id, el){  
    sections.hide();
    $('#'+id).show();
    $(this).addClass('active').closest('ul').find('li').removeClass('active');
}

});

我甚至会进一步改变你的html是这样的:

代码语言:javascript
复制
<ul class="sectionlinks">
<li class="active"><a href="#section1">ONE</a></li>
<li><a href="#section2">TWO</a></li>
<li><a href="#section3">THREE</a></li>
</ul>

<div id="section1" class="section">TEST</div>
<div id="section2" class="section">TEST 2</div>
<div id="section3" class="section">TEST 3</div>

然后你javascript可能只是:

代码语言:javascript
复制
$(function() {

$('#section2 .images').galleria();
$('#section2, #section3').hide();

var sections = $('.section');
$('.sectionlinks a').click(function(e){
    e.preventDefault();
    sections.hide();
    $($(this).attr('href')).show();
    $(this).closest('ul').find('li').removeClass('active');
    $(this).closest('li').addClass('active');
});

});

工作示例:http//jsfiddle.net/cdaRu/2/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档