为phpBB制作了一些BBcode,允许用户发布带有某些标签的flickr图片。 线程中的每个照片div都必须是唯一的,并且在加载线程时加载图像。
当涉及到唯一的DIV时,我坚持在插入BBcode时将一个唯一命名的元素插入DOM,然后加载图片。而且看起来我不能在BBcode中使用PHP,也不能在模板标签中使用PHP - 如果我可以轻松地从帖子ID和flickr标签中制作一个独特的照片元素我会笑。哦,我无法触摸模板。这一切都必须在BBcode中。 所以,这是我如何制作一个唯一的ID:
var flickrUser = "{URL}".split("/")[4];
var tag = "{URL}".split("/")[6];
var photoDIV = flickrUser + "-" + "tag";
或者......有一个名为带有唯一帖子ID的元素,我可以使用它:
<div id="p61789" class="post bg2">
我试过
var postnumber=$(this).closest('div[class^="post"]').attr('id');
但它总是似乎返回页面上的FIRST匹配div,而不是NEAREST到BBcode的点。这个元素是
下面的两个“div”<div class = "content">
在用户发布区域下方有:
<div id="sig61789" class="signature">
所以,我完全陷入困境的是导航到prev()或者nearest()或者parent(),或者确实从我没有$(this)链接的地方导航到任何地方。
所以不应该像:
$(this).prev('content').html('<ul class="thumbs" id=photoDIV></ul>');
甚至
$(this).html('<ul class="thumbs" id=photoDIV></ul>');
工作?每次我觉得我理解jquery它再次变得朦胧......
编辑:为Pointy添加了更多细节:
<div id="p63167" class="post bg2 online">
<div class="inner">
<span class="corners-top">
<span></span>
</span>
<div class="postbody">
<ul class="profile-icons">
<li class="edit-icon">
<a href="posting.php" title="Edit post">
<span>Edit post</span>
</a>
</li>
<li class="delete-icon">
<a href="posting.php" title="Delete post">
<span>Delete post</span>
</a>
</li>
<li class="report-icon">
<a href="report.php" title="Report this post">
<span>Report this post</span>
</a>
</li>
<li class="info-icon">
<a href="mcp.php" title="Information">
<span>Information</span>
</a>
</li>
<li class="quote-icon">
<a href="posting.php" title="Reply with quote">
<span>Reply with quote</span>
</a>
</li>
</ul>
<h3 class="first">
<a href="#p63167">Re: Testing new bbcode - ignore</a>
</h3>
<p class="author">
<a href="viewtopic.php">
<img src="" alt="Post" title="Post" />
</a>by
<strong>
<a href="memberlist.php">xxx</a>
</strong>» 13 Jun 2011 14:33</p>
<div class="content">
<script>var
APIkey="xxx";head.js("/forum/jflickrfeed/jflickrfeed.min.js","http://jquery-lazy.googlecode.com/svn-history/r14/trunk/jquery.lazy.source.js",function(){var
flickrUser="http://www.flickr.com/photos/xxx/tags/7thjanuary2010/".split("/")[4];var
tag="http://www.flickr.com/photos/xxx/tags/7thjanuary2010/".split("/")[6];var
photoDIV=flickrUser+"-"+"tag";$(this).html('
<ul class="thumbs" id="photoDIV">
</ul>');$.getJSON("http://www.flickr.com/services/rest/?jsoncallback=?",{method:"flickr.urls.lookupUser",url:"http://www.flickr.com/photos/xxx/tags/7thjanuary2010/",format:"json",api_key:APIkey},function(data){$('#cbox').jflickrfeed({limit:30,qstrings:{id:data.user.id,tags:tag},itemTemplate:'
<li>'+'
<a rel="colorbox" href="{{image}}" title="{{title}}">'+'
<img src="{{image_m}}" alt="{{title}}" />'+'</a>'+'</li>'},function(data){$('#cbox
a').colorbox();});});$.lazy([{src:'/forum/jflickrfeed/colorbox/colorbox/jquery.colorbox-min.js',name:'colorbox',dependencies:{css:['/forum/jflickrfeed/jflickrfeed.css','/forum/jflickrfeed/colorbox/example1/colorbox.css']}}]);});</script>
<ul id="cbox" class="thumbs"></ul>
</div>
<div id="sig63167" class="signature"></div>
</div>
</div>
</div>
答案 0 :(得分:1)
问题是你假设当你在脚本块中执行时this
上下文是脚本块本身,这是不正确的。如果没有明确给出上下文,那么您的上下文是window
DOM元素。是否有任何理由无法将此代码移至页面级别,并在页面加载时初始化所有帖子?
$(function() {
$('.post').each(function(i,item) {
console.log(this); //Post DOM element.
//execute your flick retrieval code here.
});
}
答案 1 :(得分:0)
您是否尝试过Javascript的DOM函数来添加它? http://www.javascriptkit.com/javatutors/dom2.shtml
例如,要在当前脚本之后插入,使用id“script1”:
document.getElementById("script1").parentNode.appendChild( newelement );
您也可以添加原始html,只需设置新元素的innerHTML。