将下拉列表添加到通过Javascript生成的元素

时间:2015-05-03 20:51:05

标签: javascript html wordpress html-select

以下代码将Wordpress类别动态添加为Magazine插件的水平制表符。

我需要将主题显示为下拉列表。

责任职能是:

    function sort_buttons()
    {
        $sort_terms = get_terms( $this->atts['taxonomy'] , array('hide_empty'=>true) );

        $current_page_terms = array();
        $term_count         = array();
        $display_terms      = is_array($this->atts['categories']) ? $this->atts['categories'] : array_filter(explode(',',$this->atts['categories']));

        $output = "<div class='av-magazine-sort ' data-magazine-id='".self::$magazine."' >";

        $first_item_name = apply_filters('avf_magazine_sort_first_label', __('All','avia_framework' ), $this->atts);
        $output .= "<div class='av-sort-by-term'>";
        $output .= '<a href="#" data-filter="sort_all" class="all_sort_button active_sort"><span class="inner_sort_button"><span>'.$first_item_name.'</span></span></a>';

        foreach($sort_terms as $term)
        {   
            if (!in_array($term->term_id, $display_terms)) continue;

            if(!isset($term_count[$term->term_id])) $term_count[$term->term_id] = 0;
            $term->slug = str_replace('%', '', $term->slug);

            $output .=  "<span class='text-sep {$term->slug}_sort_sep'>/</span>";
            $output .=  '<a href="#" data-filter="sort_'.$term->term_id.'" class="'.$term->slug.'_sort_button " ><span class="inner_sort_button">';
            $output .=      "<span>".esc_html(trim($term->name))."</span>";
            $output .=      "</span>";
            $output .=  "</a>";

            $this->atts['extra_categories'][] = $term->term_id;
        }

        $output .= "</div></div>";

        if(count($this->atts['extra_categories']) <= 1) return "";

        return $output;


    }

我尝试添加以下代码,其中下拉列表成功显示,但链接无效。

    function sort_buttons()
    {
        $sort_terms = get_terms( $this->atts['taxonomy'] , array('hide_empty'=>true) );

        $current_page_terms = array();
        $term_count         = array();
        $display_terms      = is_array($this->atts['categories']) ? $this->atts['categories'] : array_filter(explode(',',$this->atts['categories']));

        $output = "<div class='av-magazine-sort ' data-magazine-id='".self::$magazine."' >";

        $first_item_name = apply_filters('avf_magazine_sort_first_label', __('All','avia_framework' ), $this->atts);
        $output .= "<div class='av-sort-by-term'><select>";
        $output .= '<option><a href="#" data-filter="sort_all" class="all_sort_button active_sort"><span class="inner_sort_button"><span>'.$first_item_name.'</span></span></a></option>';

        foreach($sort_terms as $term)
        {   
            if (!in_array($term->term_id, $display_terms)) continue;

            if(!isset($term_count[$term->term_id])) $term_count[$term->term_id] = 0;
            $term->slug = str_replace('%', '', $term->slug);

            $output .=  "<span class='text-sep {$term->slug}_sort_sep'>/</span>";
            $output .=  '<option><a href="#" data-filter="sort_'.$term->term_id.'" class="'.$term->slug.'_sort_button " ><span class="inner_sort_button">';
            $output .=      "<span>".esc_html(trim($term->name))."</span>";
            $output .=      "</span>";
            $output .=  "</option></a>";

            $this->atts['extra_categories'][] = $term->term_id;
        }

        $output .= "</select></div></div>";

        if(count($this->atts['extra_categories']) <= 1) return "";

        return $output;


    }

1 个答案:

答案 0 :(得分:0)

<option>标记内的链接不被允许且不起作用。如果您有链接列表,则下面是<select>的非工作<select>和快速解决方案的示例。

<p>
    Non-working example:<br/>
    <select name="example1">
        <option value="" selected>Select one</option>
        <option><a href="http://www.stackoverflow.com">Stack Overflow</a></option>
        <option><a href="http://www.w3.org">W3C</a></option>
        <option><a href="http://www.alistapart.com">A List Apart</a></option>
    </select>
</p>
<p>
    Working example:<br/>
    <select name="example2" onchange="if(this.selectedIndex > 0){ window.location = this.options[this.selectedIndex].value; }">
        <option value="" selected>Select one</option>
        <option value="http://www.stackoverflow.com">Stack Overflow</option>
        <option value="http://www.w3.org">W3C</option>
        <option value="http://www.alistapart.com">A List Apart</option>
    </select>
</p>

但是,您的链接#为具有data-属性的网址,这意味着上述解决方案无效。您需要使用下拉菜单(查找纯CSS或CSS / JS下拉菜单代码)。以下是http://codepen.io/andornagy/pen/xhiJH所见的一个示例:

/* CSS Document */

@import url(http://fonts.googleapis.com/css?family=Open+Sans);
@import url(http://fonts.googleapis.com/css?family=Bree+Serif);

body {
	background: #FFF;
	font-size:22px;
	line-height: 32px;
	color: #000;
	word-wrap:break-word !important;
	font-family: 'Open Sans', sans-serif;
	}

h1 {
	font-size: 24px;
	text-align: center;
	color: #000;
}	

h3 {
	font-size: 16px;
	text-align: center;
	color: #000;
}

h3 a {
	color: #000;
}

a {
	color: #000;
}

h1 {
	margin-top: 50px;
	text-align:center;
	font-size:24px;
	font-family: 'Bree Serif', 'serif';
	}

#container {
	margin: 0 auto;
	max-width: 890px;
}

p {
	text-align: center;
}

#relatedContent {
  max-width: 800px;
  margin: 200px auto;
}

#relatedContent .item {
  max-width: 44%;
  padding: 3%;
  float: left;
  text-align: center;
}

#relatedContent .item a img {
  max-width: 100%;
}	

nav { 
	margin: 50px 0;
	background-color: #E64A19;
}

nav ul {
	padding:0;
	margin:0;
	list-style: none;
	position: relative;
	}
	
nav ul li {
	display:inline-block;
	background-color: #E64A19;
	}

nav a {
	display:block;
	padding:0 10px;	
	color:#FFF;
	font-size:20px;
	line-height: 60px;
	text-decoration:none;
}

nav a:hover { 
	background-color: #000000; 
}

/* Hide Dropdowns by Default */
nav ul ul {
	display: none;
	position: absolute; 
	top: 60px;
}
	
/* Display Dropdowns on Hover */
nav ul li:hover > ul {
	display:inherit;
}
	
/* Fisrt Tier Dropdown */
nav ul ul li {
	width:170px;
	float:none;
	display:list-item;
	position: relative;
}

/* Second, Third and more Tiers	*/
nav ul ul ul li {
	position: relative;
	top:-60px; 
	left:170px;
}

	
/* Change this in order to change the Dropdown symbol */
li > a:after { content:  ' +'; }
li > a:only-child:after { content: ''; }
<div id="container">
    <nav>
        <ul>
            <li><a href="#">Home</a></li>
            <li><a href="#">WordPress</a>
            <!-- First Tier Drop Down -->
            <ul>
                <li><a href="#">Themes</a></li>
                <li><a href="#">Plugins</a></li>
                <li><a href="#">Tutorials</a></li>
            </ul>        
            </li>
            <li><a href="#">Web Design</a>
            <!-- First Tier Drop Down -->
            <ul>
                <li><a href="#">Resources</a></li>
                <li><a href="#">Links</a></li>
                <li><a href="#">Tutorials</a>
            	<!-- Second Tier Drop Down -->
                <ul>
                    <li><a href="#">HTML/CSS</a></li>
                    <li><a href="#">jQuery</a></li>
                    <li><a href="#">Other</a>
                        <!-- Third Tier Drop Down -->
                        <ul>
                            <li><a href="#">Stuff</a></li>
                            <li><a href="#">Things</a></li>
                            <li><a href="#">Other Stuff</a></li>
                        </ul>
                    </li>
                </ul>
                </li>
            </ul>
            </li>
        </ul>
    </nav>
  <h1>Pure CSS Drop Down Menu</h1>
<p> A simple dropdown navigation menu made with CSS Only. Dropdowns are marked with a plus sign ( + )</p>
<p>Read tutorial <a target="_blank" href="http://andornagy.com/css-dropdown-menu/">here</a></p>
</div>