我有一个包含弹出菜单的可滚动区域.从概念上讲,这样的事情:
<div style="overflow:auto; width:100px; height:100px">
... content here that's big enough to trigger scrollbars...
<div>
<a href="javascript:$('#popup').show()">Click here</a>
<div style="position:relative">
<div id="popup"
style="display:none; position:absolute; width:150px; height:150px">
... more content. This div gets shown and hidden by jquery on click events.
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
问题是当弹出菜单弹出时,它也包含在滚动div中,并且无论我制作z-index有多高,它都不会出现在100x100像素可滚动区域之外.我当然意识到,从某种意义上说,当我告诉外部div溢出时,正是我所要求的:首先是auto.但对于我的用例,它不是我想要的 - 我希望弹出菜单"在顶部"并且能够延伸到可滚动区域之外,同时仍然保持在正确的位置,也就是说,直接位于"点击此处"链接.即使"点击此处"链接可以在容器滚动时移动.
我也意识到我可以使用一些复杂的解决方法,比如将弹出窗口完全放在可滚动的div之外并使用javascript来定位它.然后我需要对滚动事件作出反应,以便在内容滚动时重新定位等等.除了需要编写大量代码以重新实现"position:relative/position:absolute"给我的免费内容之外,这也需要对我自己的代码进行相当多的重构,所以我宁愿避免使用它.
我想知道是否有一些简单的技巧我可以应用于我的内部div来告诉它忽略它的容器的"溢出"属性,或者,如果失败了,一个方便的jquery脚本将在幕后为我实现复杂的东西所以我只需要调用它来获得我所追求的效果.
我正在我的数据库和我的C#代码之间实现一个缓存层.我们的想法是根据参数将某些数据库查询的结果缓存到查询中.数据库正在使用默认排序规则 - SQL_Latin1_General_CP1_CI_AS或者Latin1_General_CI_AS,我相信基于一些简短的谷歌搜索相当于相等,只是排序不同.
我需要一个.NET StringComparer,它可以给我相同的行为,至少对于相等测试和哈希码生成,正如数据库的排序规则所使用的那样.目标是能够在C#代码中的.NET字典中使用StringComparer来确定特定字符串键是否已经存在于缓存中.
一个非常简单的例子:
var comparer = StringComparer.??? // What goes here?
private static Dictionary<string, MyObject> cache =
new Dictionary<string, MyObject>(comparer);
public static MyObject GetObject(string key) {
if (cache.ContainsKey(key)) {
return cache[key].Clone();
} else {
// invoke SQL "select * from mytable where mykey = @mykey"
// with parameter @mykey set to key
MyObject result = // object constructed from the sql result
cache[key] = result;
return result.Clone();
}
}
public static void SaveObject(string key, …Run Code Online (Sandbox Code Playgroud)